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_destionation的值。
如果第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那么仅显示第3行(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
)
帮助。 感谢。
答案 0 :(得分:1)
我想你想要这个:
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
);
这将选择每对中的一条边。
答案 1 :(得分:0)
你可以使用自我加入并在id和id + 1之间进行比较,
但请注意,这也将在2和3之间进行比较,依此类推
select a.id,
a.node_source,
a.node_destination,
a.path
from graph a
inner join graph b on a.id=b.id+1
where (a.node_source<> b.node_destination
or b.node_source<> a.node_destination)