2016-04-11 9 views
3

複数のカテゴリに属する​​すべての製品を表示するSQLクエリから結果を取得しようとしています。複数のパラメータを持つリレーショナルデータベースに属する行の選択

リレーショナルテーブルには、だから私は、例えばやろうとしています何23,33,43をCATEGORY_IDに属するすべてのproduct_id年代を選択しているこの

category_id  product_id 
23    72 
33    72 
43    72 
23    32 
33    18 

のように見えます。この場合は72になります。注:私はすべてのIDに属する製品をORではなくキャッチしようとしています。したがって、このQRYはので、代わりに

SELECT * FROM products AS p JOIN prod_to_cat AS pc ON p.products_id=pc.products_id IN(23,33,43) 

仕事wouldntの私は

SELECT * FROM products AS p JOIN prod_to_cat AS pc ON p.products_id=pc.products_id WHERE pc.categories_id=23 AND pc.categories_id=33 AND pc.categories_id=43 

それは1つのカテゴリだけがあれば完璧に動作しますが、それは複数になったとき、それは結果が表示されませんを試してみました。

また、私は解決策を見つけるためにここに見て、

SELECT * FROM products AS p JOIN prod_to_cat AS pc ON p.products_id=pc.products_id 
WHERE exists (select * from prod_to_cat c where c.products_id=p.products_id AND c.categories_id=23) 
AND exists (select * from prod_to_cat c where c.products_id=p.products_id AND c.categories_id=33) 
AND exists (select * from prod_to_cat c where c.products_id=p.products_id AND c.categories_id=43) 

を示唆した。しかし、これは重複した結果を生成すると思われるものを発見しました。

これを行う正しい方法は何ですか?

+0

? –

答えて

2

あなたがカテゴリに属している必要がありますのみ、これらの製品は、6と18を言って取得したい場合は、クエリを、次の試してください。

DBMSは、使用している
SELECT * FROM `prod_to_cat` WHERE `categories_id` IN (6, 18) GROUP BY `products_id` HAVING COUNT(DISTINCT `categories_id`) = 2 ORDER BY `products_id` ASC 
関連する問題