带有 OR 条件的 SQL 多连接
Posted
技术标签:
【中文标题】带有 OR 条件的 SQL 多连接【英文标题】:SQL Multiple joins with OR condition 【发布时间】: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 可以在那里工作)。 【参考方案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
【讨论】:
以上是关于带有 OR 条件的 SQL 多连接的主要内容,如果未能解决你的问题,请参考以下文章