作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个将产品映射到类别的表格。每个产品可以属于多个类别,因此一个产品可以有多个具有不同类别 ID 的行。它看起来像这样:
CREATE TABLE `products_mid` (
`id` int(11) UNSIGNED NOT NULL,
`product_id` int(11) UNSIGNED NOT NULL DEFAULT '0',
`category_id` int(11) UNSIGNED NOT NULL DEFAULT '0'
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
如果我想获取属于 A
类别的所有产品 ID 的列表,这很简单——但是有没有办法获取所有 product_id
属于类别 A
、B
和 C
尽可能简单?
最佳答案
更好的方法是使用 HAVING
子句,而不是 WHERE
子句。按 product_id
分组,并选择三个类别中每个类别的计数都为非零的行,如下所示:
SELECT product_id
GROUP BY product_id
HAVING SUM(CASE WHEN category_id=1 THEN 1 ELSE 0 END) > 0
AND SUM(CASE WHEN category_id=2 THEN 1 ELSE 0 END) > 0
AND SUM(CASE WHEN category_id=3 THEN 1 ELSE 0 END) > 0
以上语句选择了属于 ID 为 1、2 和 3 的所有三个类别的产品的 product_id
。
关于mysql - SELECT from table WHERE value across multiple rows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42708356/
我是一名优秀的程序员,十分优秀!