在同一列上选择多个OR和AND

时间:2018-02-17 08:28:02

标签: mysql sql aggregate-functions

我在很多方面查看了这个,但无法真正得到解决方案,只是我想从表中选择应用各种AND和OR的行。

我有一张桌子

ID    product_list_id    tag       tag_type    prod_categ
---   ---------------    ---       --------    ----------
66    19                 maroon    color       5
67    19                 printed   design      5
68    19                 cotton    fabric      5
69    20                 blue      color       5
70    20                 printed   design      5

等...

我需要在这里获得那些既是栗色的又是蓝色的product_list_id,并打印出来(可能有AND和OR的多种组合)

我认为可行的基本查询

select DISTINCT product_list_id 
FROM product_tags 
WHERE (tag = 'blue' OR tag = 'maroon') 
AND tag = 'printed'

但它什么也没有返回。

预期输出

product_list_id
19
20

因为,product_list_id 19和20都打印出来并且是栗色或蓝色

P.S。我来了post,但我需要在结果中包含一些OR条件吗?

提前感谢您提供任何帮助

1 个答案:

答案 0 :(得分:2)

一种简单的方法是按product_list_id汇总,然后断言要求:

SELECT product_list_id
FROM product_tags
GROUP BY product_list_id
HAVING
    SUM(CASE WHEN tag = 'printed' THEN 1 ELSE 0 END) > 0 AND
    SUM(CASE WHEN tag IN ('maroon', 'blue') THEN 1 ELSE 0 END) > 0;

我们也可以使用自联接来解决这个问题:

SELECT DISTINCT t1.product_list_id
FROM product_tags t1
INNER JOIN product_tags t2
    ON t1.product_list_id = t2.product_list_id AND
       t1.tag = 'printed' AND
       t2.tag IN ('maroon', 'blue');

Demo