HI,我有以下查询,但它并没有完全按照我的预期进行
SELECT DISTINCT(c.id) AS "CLIENT CODE",c.name AS "CLIENT NAME", count(cmp.id) as "NUMBER OF CAMPAIGNS ON LIVE AND PENDING" FROM clients AS c ,campaigns AS cmp WHERE cmp.clientid = c.id AND cmp.status NOT IN('S','C','X','?') GROUP BY c.name,c.id ORDER BY c.name;
我想要实现的目标如下。我在postgres中有一个客户表和一个广告系列表。客户有广告系列,因此一个客户可以有100个广告系列。客户可以拥有状态为L,C,X或仅为L,C,P的广告系列。只有L,P,C,X,S,?状态。现在,我希望查询仅返回包含状态为L和P的广告系列而不返回其他广告系列的客户。
所以换句话说,只有具有活动状态L和P的客户才应该返回,如果客户端有X,C和L和P,则不应该返回。
希望这样做是可能的
答案 0 :(得分:4)
SELECT *
FROM clients
WHERE id IN
(
SELECT clientid
FROM campaigns
WHERE status IN ('L', 'P')
)
AND id NOT IN
(
SELECT clientid
FROM campaigns
WHERE status NOT IN ('L', 'P')
)