【问题标题】:SQL Multiple joins with OR condition带有 OR 条件的 SQL 多连接
【发布时间】:2017-10-28 09:12:10
【问题描述】:

我有以下表格:

表A

  • 身份证
  • 姓名

表B

  • 身份证
  • tableA_id

表C

  • 身份证
  • tableA_id

所以表 B 和 C 有tableA_id fk。

我需要一个查询,它将返回 TableA 中在 TableB 或 TableC 中具有引用的所有 id-s。

如果我进行标准连接,它将只返回在表 B 和表 C 中都有引用的值。

我可以使用两个查询来做到这一点,一个连接 B,另一个连接 C,并使用 UNION 来合并结果,但我不想写两次相同的查询。

有没有办法实现这个'OR' JOIN??

【问题讨论】:

  • 您可以使用 EXISTS 或 2 个外连接并检查来自 a/b 的至少 1 个非空返回值(coalesce 可以在那里工作)。

标签: sql postgresql


【解决方案1】:

试试这个

SELECT DISTINCT TABLEA.ID_A, TABLEA.NAME 
FROM TABLEA,TABLEB,TABLEC 
WHERE TABLEA.ID_A = TABLEB.ID_A AND TABLEA.ID_A = TABLEC.ID_A

使用 DISTINCT TAG 可以消除重复项。

【讨论】:

    【解决方案2】:

    这样的?

    SELECT
        *
    FROM
        TableA,
        TableB,
        TableC
    WHERE
        TableA.id = TableB.tableA_id
        OR TableA.id = TableC.tableA_id
    

    【讨论】:

      【解决方案3】:

      您可以使用左外连接并检查 id:

      SELECT a.id FROM A a 
          LEFT JOIN B b ON a.id = b.tableA_id LEFT JOIN C c ON a.id = c.tableA_id
      WHERE b.id IS NOT NULL OR c.id IS NOT NULL
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-15
        • 2021-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-13
        相关资源
        最近更新 更多