MySQL:仅选择仅具有特定值的组

时间:2018-07-13 20:31:16

标签: mysql sql

我想选择仅包含某些值的组。这将排除具有这些值和其他值的组。

详细来说,我想选择在 Type 字段中值为1和2的组

  • 不包括值1,2,3的组
  • 与值为1,2,5的组相同
  • 但是,将选择值为1和2的组。

例如,考虑下表

         Type1   f_Name     Product
User A     1       Bob       Orange
User A     2       Bob       Apple
User B     1       Bill      Orange
User B     2       Bill      Apple
User B     3       Bill      Peach

我希望出现用户A,而不是用户B。

我尝试使用NOT IN子句来完成此操作,但是数据只会取出值,并向用户包含不需要的值。在这种情况下,用户B出现,但没有值3。请提供任何帮助。

1 个答案:

答案 0 :(得分:1)

您可以使用group byhaving来标识组:

select f_name
from t
group by f_name
having sum( (Type1 = 1) ) > 0 and
       sum( (Type1 = 2) ) > 0 and
       sum( (Type1 in (1, 2) ) = count(*);

having子句中的每个条件都对符合条件的行数进行计数。 > 0表示至少有一行。 = count(*)说所有行都匹配。