我问了一个问题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,因此我可以减去结果集。我的表格规模很大,因此我希望优化查询次数!
答案 0 :(得分:2)
一种方法使用聚合,与其他答案类似:
select name
from my_table
group by name
having sum(address like 'abc%') = 0;
having
子句计算匹配行的数量。 = 0
表示给定名称没有。