如何从第二列作为参考的一列结果列表中进行选择?

时间:2019-03-10 05:44:22

标签: mysql sql

我有一个包含此数据的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)

2 个答案:

答案 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');