【问题标题】:SQL Query to Match Between Rows and Columns用于在行和列之间匹配的 SQL 查询
【发布时间】:2016-02-11 05:41:02
【问题描述】:

我有一个表,其中包含一个名为 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 ....

【问题讨论】:

    标签: sql database join


    【解决方案1】:

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

    使用不存在

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

    使用左连接

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

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

    pe。 EXCEPT 使用 SQL Server 或 MINUS 使用 Oracle

    【讨论】:

      【解决方案2】:
      SELECT DISTINCT ID1
      FROM  USERS 
      WHERE  ID1 NOT IN (SELECT DISTINCT ID2 FROM USERS);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-16
        • 1970-01-01
        • 2020-02-05
        • 1970-01-01
        相关资源
        最近更新 更多