Mysql 在同一列上选择多个或和

Mysql 在同一列上选择多个或和,mysql,sql,aggregate-functions,Mysql,Sql,Aggregate Functions,我查看了很多源代码,但没有真正得到解决方案,只是我想从应用各种AND和OR的表中选择行 我有一张桌子 ID product_list_id tag tag_type prod_categ --- --------------- --- -------- ---------- 66 19 maroon color 5 67 19 printed

我查看了很多源代码,但没有真正得到解决方案,只是我想从应用各种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
等等

我需要在这里得到那些产品列表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
因为,产品列表id 19和20都是打印的,并且是栗色或蓝色

顺便说一句,我经历了这一切,但我需要在我的结果中包括一些或更多的条件吗


提前感谢您的帮助

一个简单的方法是通过
产品列表\u 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');

您在这里的预期输出是什么?还请包括输出背后的逻辑。@TimBiegeleisen,请查看更新后的问题以及预期的输出@TimBiegeleisen@TimBiegeleisen . . . 第二个查询在条件之间执行
非和
。结果集中会出现一些“褐红色”的东西。@GordonLinoff如果我没有看错的话,这是预期的逻辑。@TimBiegeleisen。如果是这样的话,那么您的第一个查询是错误的,并且总体答案过于复杂(在中使用一个简单的
就足够了)。