Дана таблица, содержащая ребра в ориентированном графе, например:
CREATE TABLE edges (
from_here int not null,
to_there int not null
)
Каков наилучший способ получить количество различных ненаправленных ссылок для определенного узла? Нет ни дублирующих направленных ребер, ни узлов, напрямую связанных друг с другом, я просто хочу избежать двойного подсчета повторяющихся неориентированных ребер (таких как (1,2)
и (2,1)
).
Это работает, но NOT IN
плохо пахнет для меня:
SELECT COUNT(*)
FROM edges
WHERE from_here = 1
OR (to_there = 1 AND from_here NOT IN (
SELECT to_there
FROM edges
WHERE from_here = 1
))
Для этого подходят решения, специфичные для PostgreSQL.
(1,2)
должен существовать(2,1)
? - person Thomas   schedule 10.03.2011