我有一个包含此数据的sku_attributes表
attribute_id sku_id
1 1
3 1
10 1
1 2
4 2
10 2
1 3
5 3
假设我有一个包含三个值的结果集
1, 3, 10
我想查询与attribute_id列上的结果集完全匹配的所有数据。 sku_id列的每个结果必须具有相同的值。 预期的结果应该是这样的:
attribute_id sku_id
1 1
3 1
10 1
我尝试使用IN语句,但返回与结果集中的任何数据匹配的所有结果
select * from sku_attributes sa
where sa.attribute_id in
(1, 3, 10)
答案 0 :(得分:1)
按sku_id
分组,只接受没有除您指定的attribute_id
和所有您想要的分组之外的分组
select sku_id
from sku_attributes
group by sku_id
having sum(attribute_id not in (1, 3, 10)) = 0
and sum(attribute_id = 1) > 0
and sum(attribute_id = 3) > 0
and sum(attribute_id = 10) > 0
答案 1 :(得分:0)
如果您愿意,一种简洁的方法是:
select sku_id
from sku_attributes
group by sku_id
having group_concat(attribute_id order by attribute_id) = '1,3,10');