[英]Postgres - Left Join, same table
我有一張訂閱組的訂閱記錄表。 除了主鍵ID外,還有一個groupid列和一個userid列。 我想找到所有已訂閱組1的人的訂閱行,這些人也沒有組2的訂閱記錄。我想我可以使用反聯接模式,但無法正常工作。 我試過了:
SELECT
*
FROM subs s1
LEFT JOIN subs s2 ON s1.groupid=1 AND s2.groupid=2 AND s1.userid=s2.userid
WHERE s2.id IS NULL;
但這不起作用(它返回的組ID不是1的訂閱記錄)。
我會為此使用group by
:
select s.userid
from subs s
group by s.userid
having sum(case when s.groupid = 1 then 1 else 0 end) > 0 and
sum(case when s.groupid = 2 then 1 else 0 end) = 0;
中每個條件having
條款計數記錄的群體之一。 第一個條件說至少有一行groupid = 1
。 第二條說沒有groupid = 2
記錄。
您也可以通過left join
來執行所需的操作。 這是方法:
SELECT s1.*
FROM subs s1 LEFT JOIN
subs s2
ON s1.userid = s2.userid AND s2.groupid = 2
WHERE s1.groupid = 1 AND s2.id IS NULL;
因為它是left join
,所以第一個表上的條件應該放在where
子句中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.