sql - SQL JOIN 中的 AND/OR 语句

标签 sql postgresql

我有两个表:table1table2。我可以使用 id1id2 加入他们。我更喜欢使用 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/

相关文章:

sql - 将数据从 MS Sql Server 存储过程导出到 Excel 文件

mysql - 如何连接具有多个条件的多个表

SQL Group By 并分配最高值

postgresql - Phoenix Ecto Postgres 表未创建

sql - 在列中具有相同值的表中查找第一和第二高值之间的差异

sql - 从函数 postgresql 输出到屏幕并记录文件

sql - 窗口函数中的 ALL 修饰符有什么意义?

mysql - 有没有办法在表中没有主键的情况下创建外键关系

两个表之间的 SQL 相同单元需要 1 个单元格中的订单号

postgresql - Postgres : ERROR: column d. adsrc 不存在