MYSQL - 两列中的WHERE值

时间:2017-02-19 11:55:56

标签: mysql sql database

我有一张这样的桌子:

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
                    )

帮助。 感谢。

2 个答案:

答案 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)