按类别筛选SQL

时间:2012-06-15 19:35:25

标签: mysql sql

pro_id | Category
--------+---------
  25   | electronics
  27   | Electrical
  25   | household
  27   | electronics
  25   | industrial

以上是我的数据库表。我想按类别过滤结果。如果“电子”是所选类别,则结果应包括产品ID 25和27.这很容易。但我想按多个类别进行过滤。例如,如果我选择“electronics”和“household”,结果应该只是product id 25。

3 个答案:

答案 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)

不,它不应该,因为您有多个ID共享相同的类别名称。你想得到你想要的唯一方法就是拥有另一个唯一标识每条记录的字段,否则你手上就会有重复数据。