我在很多方面查看了这个,但无法真正得到解决方案,只是我想从表中选择应用各种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条件吗?
提前感谢您提供任何帮助
答案 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');