SQL-有没有一种方法可以检测在按其他列的值分组的列中是否不存在值?

时间:2020-04-01 22:32:00

标签: mysql sql database group-by db2

我有一个看起来像这样的表:

Name              Toys present

A1     ------      Dinosaur-1        
A1     ------      Dinosaur-2        
A1     ------      Dinosaur-3   
A1     ------      Dinosaur-1    
A1     ------      Dinosaur-5    
A2     ------      Dinosaur-1       
A2     ------      Dinosaur-2      
A2     ------      Dinosaur-3     
A3     ------      Dinosaur-2     
A3     ------      Dinosaur-2    
A3     ------      Dinosaur-2    
A4     ------      Dinosaur-3    
A4     ------      Dinosaur-3    
A5     ------      Dinosaur-1    
A5     ------      Dinosaur-1    
A5     ------      Dinosaur-1

是否有一个值可以返回没有“ Dinosaur-1”玩具的名字? 在上面的示例中,这将是“ A3”和“ A4”。我很难筛选可能包含多个玩具的名称是否具有此特定玩具。我尝试了Group By和Haveing子句,也曾与CTE一起玩,但是没有运气。

请告知并谢谢。

1 个答案:

答案 0 :(得分:2)

您可以按name分组并过滤没有toy的{​​{1}}的分组,如下所示:

'Dinosaur-1'

表达式select name from mytable group by name having max(toy = 'Dinosaur-1') = 0 ,当MySQL在数字上下文中求值时,返回toy = 'Dinosaur-1'代表假,返回0代表真;因此最大值1表示该组中没有行满足条件。

注意:如果您正在运行DB2(也已对其进行了标记),则可以将0子句更改为:

having