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