有一个这样的MySQL产品表,其中的列id, tag

现在,如果要选择与2个以上OR标签匹配的产品,请使用以下查询:

SELECT id FROM products WHERE tag = 'a' OR tag = 'b' OR tag = 'c'


那里没有问题。

问题是如何选择与2+个AND标签匹配的产品,即与所有指定标签匹配的产品。以下查询无法找到同时具有标签ab的产品:

SELECT id FROM products WHERE tag = 'a' AND tag = 'b'


与尝试查找至少具有3个AND标记abc的产品相同:

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'

10-07 19:17
查看更多