pro_id | Category
--------+---------
25 | electronics
27 | Electrical
25 | household
27 | electronics
25 | industrial
以上是我的数据库表。我想按类别过滤结果。如果选择“电子产品”类别,则结果应包括产品 id 25 和 27。这很容易。但我想按多个类别过滤。例如,如果我选择“电子产品”和“家庭”,结果应该只有产品 id 25。
请参阅此处的示例: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;
如果您只想要符合这两个条件的产品,则需要一个 HAVING 子句...
SELECT
p.pro_id
FROM
prod p
where
p.category in ('electronics', 'household')
having
count(*) = 2
这样做的好处是,如果您想要 3 个或更多类别,您只需将它们添加到“IN”子句并将计数更改为 3、4 或其他...
不,不应该,因为您有多个 ID 共享相同的类别名称。获得所需内容的唯一方法是使用另一个字段来唯一标识每条记录,否则重复数据会让您手头一团糟。