我有一张这样的桌子:

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
                 );

这将选择每对边中的一条边。

10-04 10:37
查看更多