我有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。 我该怎么办?谢谢
答案 0 :(得分:0)
典型方法使用left join
和coalesce()
:
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