2015-07-20 19 views
0

我的表僅包含2列IDproduct,看起來像這樣:SELECT/NOT EXISTS獨特的記錄與「條件」

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 

是BEC因爲他們有一個或多個具有產品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條記錄)

+0

你爲什麼又要求完全一樣的問題嗎? http://stackoverflow.com/questions/31484775/sql-query-to-extract-unique-records/31484829?noredirect=1 –

回答

0

你只需要加入的產品,而不是產品ID的:

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「。

+0

有沒有比使用2選擇語句更簡單的方法? – vardha

+0

不容易,沒有。你也可以通過自聯接來完成,但這可能會變慢。 –

2

使用簡單group byhaving條款:

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

這工作。感謝:D – vardha

+0

如果我從同一個表中選擇3個其他列,是否有可能將它包含在查詢中? – vardha

+0

@vardha。 。 。您可以使用聚合功能選擇它們。 。 。 'min(col1),。 。 .'。 –