带有 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 多连接的主要内容,如果未能解决你的问题,请参考以下文章

sql左连接查询+右表带有条件的实现

Mysql 多连接与原子更新 sql 查询 [竞争条件]

Mysql查询详解(条件查询、子查询、模糊查询、连接查询。。。)

带条件sql的左外连接

sql 各种连接的使用条件,

c#.net winform 选择性多条件查询数据库。