如何在具有负面条件的SQL中明智地进行分组?

时间:2015-12-03 13:04:26

标签: mysql sql

我问了一个问题here。现在,我需要它的反向输出。我跟随表My_Table,其结构如下,

Name   | Address
----------------
Test1  | abc_123
Test1  | abc_456
Test2  | xyz_123
Test1  | xyz_123
Test2  | xyz_456
Test3  | abc_123
Test4  | xyz_123
Test1  | xyz_456
Test3  | xyz_123
Test4  | xyz_456

我需要输出如下,

Name   
-------
Test2 
Test4

我需要按chunkwise进行分组并选择Name,这样任何地址的前缀都不会为abc

详细输出说明

Test1的地址为abc_123, abc_456, xyz_123, abc_123,且至少有一个地址的前缀为abc。因此不在输出中。 Test2的地址为xyz_123, xyz_456,其中没有一个具有前缀abc。因此在输出中。

x = select distinct(Name) from My_Table
y = select distinct(Name) from My_Table where Address like 'abc%'

Result  = x - y

我能够使用2个查询获得结果(如上所示),然后在结果集中使用减法运算,但这可以通过单个查询来实现吗?

注意:我使用JAVA查询MYSQL DB,因此我可以减去结果集。我的表格规模很大,因此我希望优化查询次数

1 个答案:

答案 0 :(得分:2)

一种方法使用聚合,与其他答案类似:

select name
from my_table
group by name
having sum(address like 'abc%') = 0;

having子句计算匹配行的数量。 = 0表示给定名称没有。