2017-06-22 103 views
-1

我想寫一個sql查詢來獲得沒有任何特定類別產品的類別。假設我有a,b,c,d,e類別,並且每個類別都有一些產品。現在我需要獲得所有不包含類別a產品的類別。獲取沒有任何特定類別產品的類別

分類表:

id name 
1 A 
2 B 
3 C 
4 D 
5 E 

category_products表:

product_id category_id 
1   1 
1   2 
2   3 
2   1 
4   3 
3   2 
3   4 
3   5 
4   5 

查詢我用低於其給出B,C,d,E(未如預期)

SELECT DISTINCT c.name FROM category_products AS p 
LEFT JOIN categories AS c ON c.id = p.category_id 
WHERE p.product_id NOT IN (SELECT DISTINCT product_id FROM category_products where category_id = 1) 
ORDER BY c.name 

但我需要的結果是類別D,E,它們沒有A類產品。 我會恭喜你的幫助。

+0

你在問什麼不清楚。你期待什麼結果? –

+0

@AlvinThompson預期結果是D類和E類,它們沒有A類產品。 –

回答

1

你需要做一個更多的內部查詢,如:

SELECT name 
FROM categories 
where id NOT IN (
    SELECT DISTINCT category_id 
    FROM category_products WHERE 
    product_id IN (
     SELECT product_id FROM category_products WHERE category_id = 1 
    ) 
); 

這將返回D和E.

這是SQL Fiddle

+0

它工作完美。感謝您的幫助。 –

0

您應該使用內連接

select distinct t2.name 
    from category_products t1 
    inner join Categories t2 on t2.id = t1.category_id 
    where t1.product_id not in 
    (select p.product_id 
    from category_products p 
    inner join Categories c on c.id = p.category_id 
    where c.name ='A') 
+0

謝謝您的回答,但它給出了B,C,D,E的結果。 –

0

我會傾向於做到這一點使用group byhaving

select pc.product_id 
from category_products pc join 
    categories c 
    on c.id = pc.category_id 
group by pc.product_id 
having sum(c.name = 'A') = 0; 
相關問題