Sql server 从一个表中提取记录,其中一列匹配,另一列不匹配

Sql server 从一个表中提取记录,其中一列匹配,另一列不匹配,sql-server,select,join,null,operators,Sql Server,Select,Join,Null,Operators,请原谅问题的标题,但这是我的问题- STAGING_CUST_ACCT(PARTY_KEY,NAME,TAX_ID,......) 一些样本数据 1,John,234345 2,Tom,234345 1,Ken,000000 . . . 没有任何限制。我需要编写一个查询,以提取所有具有不同party_密钥但相同tax_id和tax_id不为NULL或空的party_密钥 我确实得到了结果,但我不确定逻辑的实现是否正确。有谁能确认/纠正我是否有更简单的方法来编写上述查询?您的where子句(包

请原谅问题的标题,但这是我的问题-

STAGING_CUST_ACCT(PARTY_KEY,NAME,TAX_ID,......)
一些样本数据

1,John,234345
2,Tom,234345
1,Ken,000000
.
.
.
没有任何限制。我需要编写一个查询,以提取所有具有不同party_密钥但相同tax_id和tax_id不为NULL或空的party_密钥


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

您的where子句(包括and)似乎不必要。JOIN意味着内部连接,它只包含匹配的记录,null不会连接到其他null上,所以

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 <> ''

谢谢@Kritner。我正在测试您的查询,但与此同时,有一个简短的问题。同意内部联接不会在null上联接,但它能在空格上联接吗?我想我仍然需要ISNULLa.tax_id,在我的where条件下,因为它确实在上联接:party_键上的不等式联接将为每对不同的键返回两行。如果您只需要一行,如果您只需要每个差异一行,请尝试“大于”或“小于”比较。您能否共享一些示例数据,以便我们了解您的期望值?根据您的描述,看起来您不需要加入;您只需根据参与方密钥和税号进行分组,并筛选缺少的税号ids@Lain长者-谢谢你的回复,我已经添加了一些样本数据。在上述情况下,我需要两个参与方密钥1和2以及它们的名称,它们共享相同的tax_id 234345。有意义吗?虽然这个答案可以回答问题,但解释可能会大大提高对解决方案的接受和理解。考虑为你的答案增加更多的细节。谢谢
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 <> ''
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