过滤出包含一个特定条件的唯一列表

时间:2012-07-03 05:47:34

标签: sql filter distinct

我有一个名为'Domains'的表。列A(域名)包含各种域名的列表。 B列(状态)包含它的'状态'。状态可以是活动,结束,阻止,取消。域名可以不止一次列在列A中,并且不限于仅具有一种类型的状态。请注意,如果域A在列A中列出不止一次,并且其每个实例的状态为“已取消”,则该域的所有实例都应出现在结果中。

我想提取一份“仅”取消状态的所有域名列表。他们不能取消状态,还有其他类型的状态。在下面的示例中,它应仅返回domain5.com。

域名

Domain1.com
Domain2.com
Domain1.com
Domain4.com
Domain5.com

状态

积极的 结束
取消了 被阻止的 取消了

非常感谢!

4 个答案:

答案 0 :(得分:0)

SELECT DISTINCT  domainname FROM DomainsTable
WHERE 
Status = 'Canceled'

答案 1 :(得分:0)

您可以使用not exists子句要求在另一个状态下同一域没有行:

select  *
from    Domains d1
where   status = 'cancelled'
        and not exists
        (
        select  *
        from    Domains d2
        where   d1.domainname = d2.domainname
                and d2.status <> 'cancelled'
        )

答案 2 :(得分:0)

尝试使用以下sql查询:

select Domainnames  from Domains 
            where Status ='cancelled' AND
            Domainnames  NOT IN (SELECT Domainnames  from Domains where Status <> 'cancelled')

答案 3 :(得分:0)

试试这个:

select * from domains d 
where d.status = 'cancelled' and 
( select count(*) from domains where domainnames = d.domainesnames) = 1 ;

如果count equals to 1表示d.domainnames只有一行,即选择查询中的当前行。