我有一个表,其结构如下:

| 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 byhaving

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/

10-11 22:37
查看更多