table products
--------------
id | title
1 | Product 1
2 | Product 2
3 | Product 3
table categories
----------------
id | title
1 | Cat 1
2 | Cat 2
3 | Cat 3
table products_categories_mm
----------------
id_local | id_foriegn
1 | 2
1 | 3
2 | 3
3 | 2
SELECT *
FROM products
JOIN products_categories_mm ON products.uid=products_categories_mm.uid_local
JOIN categories ON products_categories_mm.uid_foreign = categories.uid
WHERE products.lang_uid IN (0)
AND products.page >= 1
AND products.page IN (8,9,10,11)
AND categories.uid IN (2,3)
ORDER BY products.datetime DESC
上記は、カテゴリ 2 および 3 に関連するすべての製品を検索します。製品レコード 1、2、および 3 を返します。これは問題なく、希望どおりに機能します。しかし、今度はクエリを調整して、カテゴリ 2 とカテゴリ 3 の両方に関連する製品が返されるようにする必要があります。
この場合、クエリは製品 1 を返す必要があります (両方のカテゴリに関連する唯一の製品であるため)。
SQL を次のように変更しようとしました。
SELECT *
FROM products
JOIN products_categories_mm ON products.uid=products_categories_mm.uid_local
JOIN categories ON products_categories_mm.uid_foreign = categories.uid
WHERE products.lang_uid IN (0)
AND products.page >= 1
AND products.page IN (8,9,10,11)
AND (categories.uid = 2 AND categories.uid = 3)
ORDER BY products.datetime DESC
しかし、これは何も返しません。EXPLAIN
不可能な where 句があると言います。
必要なレコードを取得するために SQL を変更するにはどうすればよいですか?