从一个表上的匹配中拉出记录,而在其他列上没有匹配

时间:2014-09-03 18:36:14

标签: sql-server select join null operators

原谅问题的标题,但这就是我所拥有的 -

STAGING_CUST_ACCT(PARTY_KEY,NAME,TAX_ID,......)

一些示例数据

1,John,234345
2,Tom,234345
1,Ken,000000
.
.
.

没有限制。我需要编写一个查询来拉出所有具有不同party_keytax_id tax_idNULL不是blankselect distinct a.party_key,a.tax_id from STAGING_CUST_ACCT a join STAGING_CUST_ACCT b on a.tax_id = b.tax_id and a.party_key <> b.party_key where ISNULL(a.tax_id,'')<>'' AND a.tax_id is not null

的party_keys
{{1}}

我确实得到了结果,但我不确定逻辑的实现是否正确。如果有更简单的方法来编写上述查询,有人可以确认/纠正我吗?

2 个答案:

答案 0 :(得分:0)

你的where子句(包括和)似乎是不必要的。 &#34; JOIN&#34;暗示内部联接,它只包含匹配的记录,nulls不会加入其他空值,所以

select distinct a.party_key,a.tax_id 
from STAGING_CUST_ACCT a
inner join STAGING_CUST_ACCT b
    on a.tax_id = b.tax_id
    and a.party_key <> b.party_key

应该给出相同的结果(但你应该确认:P)

编辑哦,而不是空白错过那部分

select distinct a.party_key,a.tax_id 
from STAGING_CUST_ACCT a
inner join STAGING_CUST_ACCT b
    on a.tax_id = b.tax_id
    and a.party_key <> b.party_key
    and a.tax_id <> ''

答案 1 :(得分:0)

select count(*), a.party, a.tax_id 
from STAGING_CUST_ACCT a
join STAGING_CUST_ACCT b
on a.tax_id = b.tax_id
GROUP By a.party, a.tax_id
Having count(*) = 1
where a.tax_id is not null