Sql 对于具有给定值的行,仅返回在列B中找不到列A值的行
在本例中,我只想返回5678,因为对于A列中有5678的行,它在B列中不存在Sql 对于具有给定值的行,仅返回在列B中找不到列A值的行,sql,sql-server,Sql,Sql Server,在本例中,我只想返回5678,因为对于A列中有5678的行,它在B列中不存在 colu\u a colu\b 1234 1234 1234 5678 5678 3321 5678 3135 不存在带有的: select distinct t.col_a from tablename t where not exists ( select 1 from tablename where col_a = t.col_a and col_b = t.col_a ) 请参
colu\u a colu\b
1234 1234
1234 5678
5678 3321
5678 3135
不存在带有的:
select distinct t.col_a from tablename t
where not exists (
select 1 from tablename
where col_a = t.col_a and col_b = t.col_a
)
请参阅。结果: 或者您可以
按列a进行分组并在HAVING子句中设置条件:
select col_a
from tablename
group by col_a
having sum(case when col_a = col_b then 1 else 0 end) = 0
请参见带有的
,除外:
SELECT DISTINCT col_a FROM tablename
EXCEPT SELECT col_a FROM tablename WHERE col_a = col_b
比forpas使用NOT EXISTSRJ的方法更简洁,但效率不高,这将返回1234。我想返回5678,因为该值不在列b中,因为在列a中包含5678的两行“HAVING SUM”(case HA.cifinteral=MP.Member\u NBR then 1 else 0 end)=0`您知道这不起作用的原因吗?Microsoft SQL不喜欢case语句中的=。我更新了SQL Server的演示,它们都正常工作。检查它们。您在case语句中缺少SUM(当HA.cifinteral=MP.Member\u NBR然后1 else 0 end=0时的case)
SELECT DISTINCT col_a FROM tablename
EXCEPT SELECT col_a FROM tablename WHERE col_a = col_b