Sql 选择/不存在具有“条件”的唯一记录

Sql 选择/不存在具有“条件”的唯一记录,sql,sql-server,tsql,unique,where-clause,Sql,Sql Server,Tsql,Unique,Where Clause,My table仅包含两列ID和product,如下所示: ID Product ----------------- 1 microsoft 0 cisco 2 cisco 7 cisco 3 vmware 0 adobe 0 microsoft 我需要编写一个查询,列出id仅为0的记录 ID Product --------------- 0 adobe 我不想列出的原因

My table仅包含两列ID和product,如下所示:

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条记录

您只需在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。

使用简单的group by和having子句:


除了使用2个select语句,还有其他更简单的方法吗?不简单,不。您也可以使用自联接,但这可能会更慢。为什么您要再次提出完全相同的问题?这很有效。谢谢:如果我要从同一个表中选择其他3列,是否可以将其包含在查询中?@vardha。您可以使用聚合函数选择它们。mincol1。。
select 0 as id, product
from [table] t
group by product
having min(id) = 0 and max(id) = 0;