簡體   English   中英

Postgres-左聯接,同一表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM