Учитывая таблицу, содержащую ребра в ориентированном графе, как это:
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 решения подходят для этого.