0

説明するのではなく、私がやろうとしていることを簡単に示します。3NFに3テーブル。product_badges は結合テーブルです。(exists サブクエリが必要です。)

SELECT * FROM shop_products WHERE EXISTS ( // this line cannot change
    SELECT * FROM product_badges as pb 
    WHERE pb.product_id=shop_products.id
    AND pb.badge_id IN (1,2,3,4)
);

これで、badge_id が 1 OR 2 OR 3 OR 4 のすべての製品が返されます。私が望むのは、これらすべての値を満たす製品のみを取得することです。pb.badge_id=1 AND pb.badge_id=2 などを実行しようとしましたが、これは何も返しません。これは今では意味があります。また、INTERSECT を使用して複数のクエリを実行しようとしましたが、エラーが発生しました。複数のクエリが重要だと思いますが、UNION は基本的に IN と同じであり、この場合の JOIN の使用方法はわかりません。

4

1 に答える 1

3

以下を試してください (正確に 4 つの異なる必須の bagde_id を想定しています):

SELECT * FROM shop_products WHERE EXISTS ( // this line cannot change
    SELECT pb.product_id, count(distinct pb.bagde_id) FROM product_badges as pb 
    WHERE pb.product_id=shop_products.id
    AND pb.badge_id IN (1,2,3,4)
    GROUP BY pb.product_id
    HAVING count(distinct pb.bagde_id) = 4
);
于 2012-07-20T19:50:47.883 に答える