SELECT / NOT EXISTS具有'条件的唯一记录'

时间:2015-07-20 17:04:41

标签: sql sql-server tsql unique where-clause

我的表格只包含2列IDproduct,如下所示:

ID      Product
----------------- 
1       microsoft
0       cisco
2       cisco
7       cisco
3       vmware
0       adobe
0       microsoft

我需要编写一个列出id = 0的记录的查询,

ID      Product
---------------
0       adobe 

我不想列出的原因

ID      Product
----------------
0       micrsoft
0       cisco 

是因为他们有一个或多个具有产品ID的记录。

试过这个:

SELECT 
    [ProductID], [Product]
FROM [table] AS t1
WHERE ProductID = 0
    AND NOT EXISTS (SELECT 1
                    FROM [table] AS t2
                    WHERE t1.ProductID = t2.ProductID
                      AND t2.ProductID <> 0)

似乎需要很长时间才能查询。 (表有2 000 000条记录)

2 个答案:

答案 0 :(得分:2)

使用带group by子句的简单having

select 0 as id, product
from [table] t
group by product
having min(id) = 0 and max(id) = 0;

答案 1 :(得分:0)

您只需要加入Product而不是ProductID:

SELECT  [ProductID],[Product]
FROM   [table] as t1 
where ProductID=0 
AND NOT EXISTS (
  SELECT 1 FROM [table] AS t2 
  where  t1.Product=t2.Product 
  AND t2.ProductID<>0
)

这转换为“在没有其他行的情况下,产品具有相同的名称,ID不是0”。