Sql 选择/不存在具有“条件”的唯一记录
My table仅包含两列ID和product,如下所示: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 我不想列出的原因
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;