我有两个表: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)
它返回一些结果,但我想确定它是否有效,因为我以前没有看到它被使用过。
有没有更好的方法来做到这一点?
最佳答案
看起来您在评论中有一个不错的答案,但要将另一种可能性抛入环中,您可以运行两个查询并将它们合并。
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
合并将消除集合之间的任何重复项,并将返回任一条件为真的记录,就像您的 or 语句一样。在性能方面,联合可能会慢一点,但可以让您更轻松地控制集合。例如,如果您只希望 set 2 在 id1 为 null 时返回结果,只需将其添加到 where 子句中即可。无论如何希望有所帮助。
关于sql - SQL JOIN 中的 AND/OR 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31407521/