pro_id | Category
--------+---------
25 | electronics
27 | Electrical
25 | household
27 | electronics
25 | industrial
以上是我的数据库表。我想按类别过滤结果。如果“电子”是所选类别,则结果应包括产品ID 25和27.这很容易。但我想按多个类别进行过滤。例如,如果我选择“electronics”和“household”,结果应该只是product id 25。
答案 0 :(得分:2)
请参阅此处的示例:http://sqlfiddle.com/#!2/09028/7
通过pro_id将您的表格加入自己,然后按类别过滤以选择具有两个类别的所有产品:
SELECT prod1.pro_id
FROM prod AS prod1
INNER JOIN prod AS prod2 ON prod1.pro_id = prod2.pro_id
WHERE prod1.Category = 'electronics'
AND prod2.Category = 'household';
选择至少包含一个类别的所有产品:
SELECT prod.pro_id
FROM prod
WHERE prod.Category = 'electronics'
OR prod.Category = 'household'
GROUP BY prod.pro_id;
答案 1 :(得分:1)
如果您只想要符合BOTH标准的产品,则需要一个HAVING条款...
SELECT
p.pro_id
FROM
prod p
where
p.category in ('electronics', 'household')
having
count(*) = 2
这样做的好处是,如果您想要3个或更多类别,您只需将它们添加到“IN”子句并将计数更改为3,4或其他任何类别......
答案 2 :(得分:0)