Mysql 在同一列上选择多个或和
我查看了很多源代码,但没有真正得到解决方案,只是我想从应用各种AND和OR的表中选择行 我有一张桌子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
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。如果是这样的话,那么您的第一个查询是错误的,并且总体答案过于复杂(在中使用一个简单的就足够了)。