有一个这样的MySQL产品表,其中的列id, tag
现在,如果要选择与2个以上OR标签匹配的产品,请使用以下查询:
SELECT id FROM products WHERE tag = 'a' OR tag = 'b' OR tag = 'c'
那里没有问题。
问题是如何选择与2+个AND标签匹配的产品,即与所有指定标签匹配的产品。以下查询无法找到同时具有标签
a
和b
的产品:SELECT id FROM products WHERE tag = 'a' AND tag = 'b'
与尝试查找至少具有3个AND标记
a
,b
和c
的产品相同:SELECT id FROM products WHERE tag = 'a' AND tag = 'b' AND tag = 'c'
是否有简单的方法来获得与2+ AND标签匹配的产品,就像获得与OR标签匹配的产品一样简单?
最佳答案
您需要聚合和having
子句:
select id
from products
where tag in ('a', 'b', 'c')
group by id
having count(distinct tag) = 3
上面的查询为您提供了所有具有标签
id
,'a'
和'b'
的'c'
。