1

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

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

4

3 回答 3

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;
于 2012-06-15T19:39:36.020 回答
2

如果您只想要符合这两个条件的产品,则需要一个 HAVING 子句...

SELECT
      p.pro_id
   FROM       
      prod p
   where
      p.category in ('electronics', 'household')
   having
      count(*) = 2

这样做的好处是,如果您想要 3 个或更多类别,您只需将它们添加到“IN”子句并将计数更改为 3、4 或其他...

于 2012-06-16T13:20:29.757 回答
0

不,不应该,因为您有多个 ID 共享相同的类别名称。获得所需内容的唯一方法是使用另一个字段来唯一标识每条记录,否则重复数据会让您手头一团糟。

于 2012-06-15T19:46:30.637 回答