问题描述
我想对mysql数据库进行查询,以获取可用的产品, sale_id为any1或any2或二者兼有的商品,并且属于 id a或b或同时来自以下两者的类别表category_product ,其中具有((category_product表))2列 product_id和category_id ,因为我的产品可以属于多个类别。
这是我的查询
SELECT *
FROM products
WHERE available = 1
AND sale_id = 3
OR sale_id = 4
AND id IN (
SELECT product_id
FROM category_product
WHERE category_id = 2
OR category_id = 3
)
但这没用!!
结果是,它得到了第一个查询,将其中一个可用的= 1和sale_id = 3或4或两者都纠正了。但是它得到的产品不属于2或3或两者都属于
请帮忙!!!
解决方法
我认为您只需要括号或IN
:
SELECT p.*
FROM products p
WHERE p.available = 1 AND
p.sale_id IN (3,4) AND
p.id IN (SELECT product_id
FROM category_product cp
WHERE category_id IN (2,3)
);
您似乎正在学习SQL或至少是布尔表达式。 AND
和OR
不会自动执行您想要的操作。混合它们时,请使用括号,直到掌握了要诀。
您的条件解析为:
WHERE (p.available = 1 AND p.sale_id = 3) OR
(p.sale_id = 4 AND
p.id IN (SELECT product_id
FROM category_product cp
WHERE category_id IN (2,3)
)
)