在一个查询中两次连接同一张表

时间:2019-01-14 16:46:45

标签: mysql sql

我有3个表要加入。我们称它们为A,B,C。我希望这两个查询具有相同的结果,但只有一个:

SELECT * FROM A JOIN B ON B.ext_id = A._id
SELECT * FROM A JOIN C ON C.ext_id = A._id

另外,B.ext_id和C.ext_id不能具有相同的值,这意味着B.ext_id和C.ext_id不能同时具有相同的A._id值

很明显,此查询:

SELECT * FROM A JOIN B ON B.ext_id = A._id JOIN C ON C.ext_id = A._id

返回null。 我该怎么办?谢谢

2 个答案:

答案 0 :(得分:0)

典型方法使用left joincoalesce()

select a.*,
       coalesce(b.col1, c.col1) as col1
from a left join
     b
     on b.ext_id = a._id left join
     c
     on c.ext_id = a._id;

coalesce()用于两个表中所需的所有列。

答案 1 :(得分:0)

此查询将为您提供所需的内容,并且不会显示任何不匹配项,类似于您正在执行的两个内部联接查询。这也应该适用于其他表。

SELECT a.*, COALESCE(b.ext_id, c.ext_id) AS ext_id
FROM A
    LEFT JOIN B ON A._id = B.ext_id
    LEFT JOIN C ON A._id = C.ext_id
WHERE COALESCE(b.ext_id, c.ext_id) IS NOT NULL