我问了一个问题 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
我需要按 block 进行分组并选择名称
,这样所有地址的前缀都不为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,因此我可以减去结果集。我的表大小很大,因此我想优化查询数量!
最佳答案
一种方法使用聚合,与另一个答案类似:
select name
from my_table
group by name
having sum(address like 'abc%') = 0;
having
子句计算匹配行的数量。 = 0
表示没有给定名称。
关于mysql - 如何在带有负条件的SQL中按 block 进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34066839/