SQL JOIN中的AND/OR语句

Tim*_*Tim 5 sql postgresql

我有两张桌子:table1table2.我可以使用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)

它会返回一些结果,但我想确定它是否有效,因为我之前没有看过它.

有没有更好的方法来做到这一点?

Ran*_*all 2

看起来您在评论中有一个不错的答案,但是为了将另一种可能性扔进环中,您可以运行两个查询并将它们联合起来。

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 子句即可。无论如何希望有帮助。