Postgres查询问题,需要选择唯一值

时间:2010-11-11 15:08:51

标签: postgresql

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,则不应该返回。

希望这样做是可能的

1 个答案:

答案 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')
        )