Sql 如何返回与联接条件不匹配的行数
我有两张表tb_acct和tb_txnSql 如何返回与联接条件不匹配的行数,sql,sql-server,Sql,Sql Server,我有两张表tb_acct和tb_txn tb_acct (acct_num, acct_name) tb_txn (txn_memo, originator_acct_num, receiver_acct_num) tb\u txn可以与tb\u账户在发起人账户和接收人账户 我想写一个查询来返回tb_账户中的记录数,这些记录的账号与发起人账号和接收人账号都不匹配,即所有那些无法绑定到tb_账户表的记录。不清楚您的意思是要么不绑定,要么两者都不匹配。但是,同样的结构也起作用。任何一侧的不匹配导致
tb_acct (acct_num, acct_name)
tb_txn (txn_memo, originator_acct_num, receiver_acct_num)
tb\u txn
可以与tb\u账户
在发起人账户
和接收人账户
我想写一个查询来返回tb_账户中的记录数,这些记录的账号与发起人账号和接收人账号都不匹配,即所有那些无法绑定到tb_账户表的记录。不清楚您的意思是要么不绑定,要么两者都不匹配。但是,同样的结构也起作用。任何一侧的不匹配导致故障的版本为:
select t.*
from tb_txn t
where not exists (select 1 from tb_acct a where a.acct_num = t.originator_acct_num) or
not exists (select 1 from tb_acct a where a.acct_num = t.receivor_acct_num);
如果两者不匹配,请将
或
更改为和
。这会满足您的要求:
SELECT
Count(*)
FROM
tb_acct A
WHERE
NOT EXISTS (
SELECT *
FROM
tb_txn T
WHERE
A.acct_num = T.originator_acct_num
OR A.acct_num = T.receiver_acct_num
)
;
但我不知道你的意思是:
SELECT
Count(*)
FROM
tb_txn T
WHERE
NOT EXISTS (
SELECT *
FROM
tb_acct A
WHERE
T.originator_acct_num = A.acct_num
OR T.receiver_acct_num = A.acct_num
)
;
对于您是否希望在两列中都没有表示的帐户(因此需要修改我的查询以将
或拆分为两个EXISTS
子句),或者您是否希望在两列中都没有表示的帐户(我为您编写的内容)。到目前为止您尝试了什么?你是说发起者账户数量
还是接收者账户数量
?你是对的,我的意思是你想知道的。对不起,我发错了。谢谢。将运行查询并接受正确的答案。是否可能不需要事务表中与accounts表不匹配的事务行数,而是需要与tb\U acct表上的原始\u acct\u num和接收方\u acct\u num都不匹配的txn行数。