2016-10-07 154 views
0

集團的不同記錄我有一個表:supplier_productSQL - 從獲取具有公共領域

Product , Supplier, Status 
Sugar , N_Supp, MAIN 
Sugar , S_Supp, SUB 
Sugar , E_Supp, MAIN 
Water , N_Supp, SUB 
Water , S_Supp, SUB 
Water , W_Supp, SUB 
Milk , S_Supp, MAIN 
Milk , N_Supp, MAIN 
Cream , N_Supp, SUB 
Cream , E_Supp, SUB 
Coffee , S_Supp, MAIN 
Coffee , W_Supp, SUB 
Coffee , N_Supp, SUB 

我得只有「子」的地位的所有產品。 我使用了這段代碼。但我不能用我的查詢找出問題,它有不正確的結果

SELECT DISTINCT 
    s.product 
FROM supplier_product s 
WHERE EXISTS (SELECT 
    * 
FROM supplier_product 
WHERE supplier_product.product = s.product 
AND supplier_product.status = 'SUB') 

它應該得到的結果是:

Product 
Water 
Cream 

請幫幫忙,如果你也遇到這個問題,或者有任何聯繫/建議。我很樂意瞭解它。謝謝。

回答

2

這是最容易做到使用聚合:

select sp.product 
from supplier_product sp 
group by sp.product 
having min(sp.status) = max(sp.status) and -- the statuses are all the same 
     min(sp.status) = 'SUB';    -- the value is 'SUB' 
+0

謝謝@Gordon Linoff,這也爲我工作。 :) – user3818587

1

你可以使用HAVINGGROUP BY

SELECT product 
FROM supplier_product 
GROUP BY product 
HAVING 
    SUM(CASE WHEN status = 'SUB' THEN 1 ELSE 0 END) > 0 
    AND SUM(CASE WHEN status <> 'SUB' THEN 1 ELSE 0 END) = 0 

ONLINE DEMO

+0

謝謝@Felix Pamittan,它正在工作。也感謝演示。 :d – user3818587

-1
select distinct product 
from supplier_product 
where status = 'SUB'