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 以获得我想要的记录?