2016-07-03 22 views
0

我有兩個數據表。一個是產品,另一個是他們所處類別的分類學表。我無法弄清楚如何進行排除工作並覆蓋分類表中的所有實例。MYSQL:當存在多個時根據類別排除結果產品

表產品

ID | Name 
1 | Apples 
2 | Oranges 
3 | Potatoes 
4 | Rosemary 

表類別

TaxID | ID | CategoryID 
1  | 1 | 10 
2  | 2 | 10 
3  | 1 | 20 
4  | 2 | 20 
5  | 3 | 20 
6  | 3 | 30 
7  | 4 | 40 

現在如果我請求該信息:

SELECT p.ID, Name, categoryID FROM Products p JOIN Category c ON p.ID = c.ID WHERE CategoryID != 30 AND CategoryID != 40 GROUP BY p.ID 

我得到:

ID | Name  | CategoryID 
1 | Apples | 10 
2 | Oranges | 10 
3 | Potatoes | 20 

我想要的只是蘋果和橘子,並且讓土豆沒有出現,因爲它們也包含在CategoryID 30中。它排除了迷迭香,但在土豆中包含了它,因爲它在分類表中有另一個類別。

回答

1

試試這個碼應該會更快:

SELECT p.ID, p.Name, c.categoryID, c2.ID 
FROM Products p JOIN Category c ON p.ID = c.ID 
LEFT JOIN Category c2 ON (c2.ID = c.ID AND c2.CategoryID IN (30,40)) 
WHERE c2.ID IS NULL 
GROUP BY p.ID 

這裏是sqlfiddle鏈接:http://sqlfiddle.com/#!9/8d7354/12

0

你可以試試下面:

SELECT p.ID, Name, categoryID 
FROM Products p JOIN Category c 
    ON p.ID = c.ID 
WHERE p.ID NOT IN 
(
    SELECT ID 
    FROM Category 
    WHERE CategoryID IN (30, 40) 
) 
GROUP BY p.ID 
相關問題