根据这个SQL join cheat-sheet ,一列上的左外连接如下:
SELECT *
FROM a
LEFT JOIN b
ON a.foo = b.foo
WHERE b.foo IS NULL
我想知道多列连接会是什么样子,它应该是 WHERE
中的 OR
还是 AND
> 条款?
SELECT *
FROM a
LEFT JOIN b
ON a.foo = b.foo
AND a.bar = b.bar
AND a.ter = b.ter
WHERE b.foo IS NULL
OR b.bar IS NULL
OR b.ter IS NULL
或
SELECT *
FROM a
LEFT JOIN b
ON a.foo = b.foo
AND a.bar = b.bar
AND a.ter = b.ter
WHERE b.foo IS NULL
AND b.bar IS NULL
AND b.ter IS NULL
?
(我认为不会,但如果重要的话,数据库引擎是 Vertica 的)
(我赌的是OR
)
最佳答案
这取决于列是否可为空,但假设它们不可为空,则检查其中任何一个即可:
SELECT *
FROM a
LEFT JOIN b
ON a.foo = b.foo
AND a.bar = b.bar
AND a.ter = b.ter
WHERE b.foo IS NULL -- this could also be bar or ter
这是因为成功连接后,所有三列都将具有非空值。
如果其中一些列可为空,并且您想检查其中任何一列在连接后是否有值,那么您的第一种 (OR
) 方法就可以。
关于多列上的 SQL 左外连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40015779/