Представьте таблицу узлов с колонками Node1 и Node2.
SELECT node1, node2
FROM nodes n
WHERE EXISTS (SELECT 1 FROM nodes WHERE node1 = n.node2 AND node2 = n.node1)
Конечно, вы захотите убедиться, что он проиндексирован, а именно:
(node1, node2)
и
(node2, node1)
Это все равно даст вам A, C и C, A. Чтобы отфильтровать их, измените запрос на:
SELECT node1, node2
FROM nodes n
WHERE EXISTS (SELECT 1 FROM nodes WHERE node1 = n.node2 AND node2 = n.node1)
AND node1 < node2
при условии, что есть естественный порядок, которым вы можете воспользоваться.