我有一张这样的桌子:
id | node_source | node_destination | path
1 | 1 | 0 | {"coordinates": [[-6.27400693507...
2 | 0 | 1 | {"coordinates": [[-6.24568104953...
3 | 1 | 2 | {"coordinates": [[-6.24568104953...
4 | 2 | 1 | {"coordinates": [[-6.27230059993...
我想比较第1行和第2行、第3行和第4行之间的node_source和node_destination的值。
如果第1行的node_source==第2行的node_destination和第1行的node_destination==第2行的node_source,则仅显示第一行(id=1)
如果第3行的node_source==第4行的node_destination和第3行的node_destination==第4行的node_source,则仅显示第三行(id=3)
最终输出如下:
id | node_source | node_destination | path
1 | 1 | 0 | {"coordinates": [[-6.27400693507...
3 | 1 | 2 | {"coordinates": [[-6.24568104953...
这里是我的代码(但不起作用):
SELECT * FROM graph t1
WHERE NOT EXISTS(SELECT * FROM graph t2
WHERE t2.node_source = t1.node_destination AND t2.node_destination = t1.node_source
)
救命啊。
谢谢。
最佳答案
我想你想要这个:
SELECT g.*
FROM graph g
WHERE g.node_source <= g.node_destination
UNION ALL
SELECT g.*
FROM graph g
WHERE g.node_source > g.node_destination AND
NOT EXISTS (SELECT 1
FROM graph g2
WHERE g2.node_source = g.node_destination AND g2.node_destination = g.node_source
);
这将选择每对边中的一条边。