繁体   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