如何返回与连接条件不匹配的行数

时间:2014-03-12 21:54:50

标签: sql sql-server

我有两个表tb_acct和tb_txn

tb_acct (acct_num, acct_name)
tb_txn (txn_memo, originator_acct_num, receiver_acct_num)

tb_txn可与tb_acctoriginator_acct_num上的receiver_acct_num加入

我想编写一个查询来返回tb_acct中的记录数,其中acct_num与originator_acct_num和receiver_acct_num都不匹配,即所有那些无法绑定到tb_acct表的记录。

2 个答案:

答案 0 :(得分:0)

目前还不清楚你是否意味着要么没有回头,要么两者兼而有之。但是,相同的结构是有效的。任何一方不匹配导致失败的版本是:

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);

如果两者都不匹配,请将or更改为and

答案 1 :(得分:0)

这就是你提出的问题:

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
   )
;

对于您是否希望在两个列中都没有显示的帐户存在一些小混淆(因此我需要修改我的查询以将OR拆分为两个{{1}或者你是否想要 列中没有表示的帐户(我为你写的)。