行和列之间匹配的SQL查询

时间:2016-02-11 05:41:03

标签: sql database join

我有一个名为ID1的列和一个名为ID2的列。我想折叠ID1为ID2的所有行,另一行也将ID1作为ID2。所以基本上这是在查询运行之前:

ID1  ID2
34  45
45  32
76  12
13  25

在查询运行后会是这个:

ID1  ID2
34   45
76  12
13  25

我已经尝试了很多选择,而且我非常沮丧。我所有的解决方案都破碎了但是开始这样的事情:

SELECT * FROM USERS u1 INNER JOIN USERS u2 WHERE u1.ID1 = u2.ID2 and ....

2 个答案:

答案 0 :(得分:2)

使用ANSI SQL,您至少有以下选项

使用NOT EXISTS

SELECT *
FROM   USERS u1
WHERE  NOT EXISTS (SELECT * FROM USERS u2 WHERE u2.ID1 = u1.ID2)

使用LEFT JOIN

SELECT *
FROM   USERS u1
       LEFT OUTER JOIN USERS u2 ON u2.ID1 = u1.ID2
WHERE  u2.ID1 IS NULL

并且根据您的DBMS,可能还有其他

PE。 Image here使用SQL Server或EXCEPT使用Oracle

答案 1 :(得分:1)

SELECT DISTINCT ID1
FROM  USERS 
WHERE  ID1 NOT IN (SELECT DISTINCT ID2 FROM USERS);