我有两张桌子:table1和table2.我可以使用id1或加入他们id2.我更喜欢使用id1,但因为在某些行id1中缺少,所以我必须使用id2.以下语法是否正确:
SELECT *
FROM table1 as a
LEFT JOIN table2 as b
ON (a.id1 is not null and a.id1 = b.id1) or
(a.id2 is not null and a.id2 = b.id2)
Run Code Online (Sandbox Code Playgroud)
它会返回一些结果,但我想确定它是否有效,因为我之前没有看过它.
有没有更好的方法来做到这一点?
看起来您在评论中有一个不错的答案,但是为了将另一种可能性扔进环中,您可以运行两个查询并将它们联合起来。
select *
from table1 as a
LEFT JOIN table2 as b
on a.id1 = b.id1
union
select *
from table1 as a
LEFT JOIN table2 as b
on a.id2 = b.id2
Run Code Online (Sandbox Code Playgroud)
并集将消除集合之间的任何重复项,并将返回任一条件为真的记录,就像您的 or 语句一样。性能方面,联合可能会慢一些,但可以让您更轻松地控制集合。例如,如果您只希望 set 2 在 id1 为 null 时返回结果,只需将其添加到 where 子句即可。无论如何希望有帮助。