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条件?
将 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)
归档时间: |
|
查看次数: |
277 次 |
最近记录: |