0

ここでの内部クエリは、1 つのテーブルにのみ表示される値を返します。外側のクエリは、それらの数を返すことになっています。代わりに、NULL 値だけでなく、テーブル全体を返します。

select count(*) from tblicd
where exists
(
select i.icd_id
from tblicd i left outer join icd_jxn on icd_jxn.icd_id=i.icd_id
where icd_jxn.icd_id is null
)

内部クエリ

select i.icd_id
    from tblicd i left outer join icd_jxn on icd_jxn.icd_id=i.icd_id
    where icd_jxn.icd_id is null

動作し、私が望むことを行います。(このようなサブクエリメソッドを使用して)外側のクエリを使用して、内側のクエリが返す行数を返すだけにしたいと思います。

4

2 に答える 2

1

tblicdサブクエリで 2 つの (外側と内側の) テーブルを結合する必要があります。

and i.icd_id = tblicd.icd_id

(またはtblicdテーブルのIDが何であれ)

于 2012-05-18T17:42:41.057 に答える
1

あなたが投稿したクエリは意味がありません。ただし、あなたの説明から、2 つのテーブルがあり、両方のテーブルに存在しない ID を見つけようとしているように思えます。それが正しければ、次のようなことを試してください。

select count(*) as cnt
from table1 t1 
     full outer join
     table2 t2
     on t1.id = t2.id
where t1.id is null
      or t2.id is null

これはあなたが使用しているデータベースでは機能しないかもしれませんが、あなたがそれを教えてくれなかったので、SQL の方言に合うようにソリューションを調整することはできません.


改訂された質問に基づいて、これをいくつかの方法で単純化できます。

select count(*) 
from tblicd 
where not exists (select i.icd_id
                  from icd_jxn
                  where icd_jxn.icd_id = tblicd)

select count(tblicd.icd_id)
from tblicd 
     left join
     icd_jxn
     on tblicd.icd_id = icd_jxn.icd_id
where icd_jxn.icd_id is null

select count(tblicd.icd_id)
from tblicd
where icd_id not in (select icd_id 
                     from icd_jxn)

基本的に、2回から選ぶ理由はありませんtblicd

于 2012-05-18T17:53:18.870 に答える