检查每个组的另一列中是否存在列值

时间:2019-03-25 13:21:37

标签: sql group-by exists

我有三个变量:组变量var1和var2。对于每个组,var2的每个值都应存在于var1中。我想返回所有不是这种情况的组(因此每个组我想知道何时var1中不包含var2)

示例:

mygroup  var1       var2
1          1          -
1          2          1
1          3          2
1          4          -
2         23         23 
2         24         20 
2         26          -
3         30         10
3         20          -
3         10          -

所以在这种情况下,我希望我的输出为第2组,因为var1(第2组)中未包含20。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

不存在

select mygroup from table_name t1
where not exists( select 1 from table_name t2 where t1.var2=t2.var1
                and t1.mygroup=t2.mygroup)
       and t1.var2 is not null 

答案 1 :(得分:1)

使用cte和临时表的另一种方法:

  1. 找出同一mygroup的var1中未包含的var2值
  2. 列出mygroup并将它们分组到在步骤1中找到的列表中的var2中。

尝试以下方法:

(pin|status|announce)

此解决方案在MsSql-2014中有效。