2016-07-03 2 views
0

私は2つのデータテーブルを持っています。 1つは製品で、もう1つはカテゴリの分類表です。排除作業をどのように行うか、分類表のすべてのインスタンスをカバーする方法はわかりません。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 

私が欲しかったのはリンゴとオレンジのみでしたし、ジャガイモもカテゴリーID 30に含まれているので表示されません。ローズマリーは除きますが、ジャガイモではタキソミーミーテーブルに別のカテゴリがあるのでジャガイモを含みます。

答えて

1

が速くなければなりません。このコードを試してみてください。http://sqlfiddle.com/#!9/8d7354/12

:ここ
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リンクです
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 
関連する問題