2011-12-13 5 views
1

から製品を選択:私は3つのテーブル持って私は、クエリに問題が持っているフィルタ

を: 製品(ID、名前) 設定(ID、名前) product_setting(PRODUCT_ID、setting_id)を

たとえば、フィルタを選択した製品のみを選択したいと考えています。

SELECT p. *, s.id as setting 
FROM Products p 
INNER JOIN product_setting p2 ON (p.id = p2.product_id) 
INNER JOIN settings s ON (s.id = p2.setting_id) 
WHERE s.id IN (1,2) 

が、私はそれらの「設定」を持っている製品のみを取得(AND)する方法「を設定」ID = 1つのまたはID = 2 を持っているすべての製品を取得:

私はこれを行います?

ありがとうございます!

答えて

2
SELECT p.*, s.id as setting 
FROM Products p 
INNER JOIN product_setting p2 ON (p.id = p2.product_id) 
INNER JOIN settings s ON (s.id = p2.setting_id) 
WHERE s.id IN (1,2) 
GROUP BY p.id 
HAVING COUNT(*)=2; // size of IN() 
+0

キル以上のように思えるけど...データの過度おこがましいです。複数の設定が存在する場合を考えてみましょう。これは防ぐことができる外部の問題ですが、不正なデータがシステムに入ることが許されていれば、簡単にバグが発生する可能性があります。 – Glenn

+0

うん!ありがとう... – Mauro

0

これはこれは思え

SELECT p. *, s.id as setting 
FROM Products p 
INNER JOIN product_setting p2 ON (p.id = p2.product_id) 
INNER JOIN settings s ON (s.id = p2.setting_id) 
INNER JOIN settings s2 ON (s.id = p2.setting_id) 
WHERE 
    s.id = 1 
    AND s2.id = 2 
+1

s.idは1行と2の両方で共存することはできません – ajreal

+0

もちろん、私の愚かなことです。 – Glenn

関連する問題