使用OR优先处理多个列上的JOIN

diz*_*zyf 9 sql postgresql join

我正在尝试跟踪博客网站上的评论来源,我的问题涉及使用OR语句在多列上优先加入JOIN .

评论表:

      Column        |          Type
--------------------+-------------------------
 id                 | integer
 text               | character varying(1024)
 session_source_id  | integer
 user_source_id     | integer
Run Code Online (Sandbox Code Playgroud)

如果我有这样的查询:

SELECT s.type, COUNT(c.id) FROM comments c
   LEFT JOIN sources s ON (c.session_source_id = s.id OR c.user_source_id = s.id) 
GROUP BY 1;
Run Code Online (Sandbox Code Playgroud)

在某些情况下我们知道用户来源但不知道会话源(这就是我使用的原因OR),但是如果我们还有user_source_id 并且这两个ID不同,我想优先考虑session_source_id .

(也有一些情况我们不知道任何一个来源,两个列都是null,因此LEFT JOIN)

该查询是否优先考虑session_source_id上​​的JOIN,因为它在加入OR语句中首先列出?Postgres如何处理JOIN语句中的OR条件?

The*_*war 4

将 GarethD 的评论发布为答案和 Wiki,以免丢失:

尝试 COALESCE 而不是 OR...

LEFT JOIN sources s 
ON s.id = COALESCE(c.session_source_id, c.user_source_id)
Run Code Online (Sandbox Code Playgroud)