我有一个表,其结构如下:
| product_id | category_id |
| 1 | 1 |
| 1 | 2 |
| 2 | 1 |
| 2 | 2 |
| 2 | 3 |
| 3 | 1 |
| 3 | 2 |
| 3 | 3 |
| 3 | 4 |
所以:
产品1属于类别1和2
产品2属于类别1、2和3
产品3属于类别1、2、3和4
等等...
如何构造一个SQL查询,该查询可以检索以下位置的product_id:
第4类
或2类,但不是3或4类
或1类,但不是2类
我试过了:
SELECT *
FROM `catalog_category_product`
WHERE category_id = 1
OR (category_id = 2 AND category_id NOT IN (3,4))
OR (category_id = 1 AND category_id NOT IN (2,3))
GROUP BY product_id
...但是这没有达到预期的效果。
首先十分感谢
莎拉
最佳答案
您可以使用group by
和having
:
select product_id
from t
group by product_id
having (sum(category_id = 4) > 0)
or
( sum(category_id = 2) > 0 and
sum(category_id in (3, 4)) = 0
)
or
( sum(category_id = 1) > 0 and
sum(category_id = 2) = 0
);
表达式
sum(category_id = 4)
计算每个产品的类别4的行数。 > 0
表示至少存在这样的一行。 = 0
表示没有这样的行。关于mysql - SQL查询比较不同行中的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46828940/