- ベストアンサー
NULLを認識させる方法
- Access2000を使用しています。SQL文について質問です。
- AとBの内容が似たテーブルがあります。それぞれの'数量'フィールドを比べ、一致する件数を出力したいという目的です。
- IS NULLやIS NOT NULLを使ってもTRUEかFALSEが渡ってしまいます。COUNTを使ってデータが一致しないところがNULLであることを認識させ、カウントからはずすにはどのようにSQLを作成すればよいでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
キーワードとしては Nz関数 IIf関数ってところでしょうか select Count(*) from TBL1 inner join TBL2 on TBL1.KEYCOL = TBL2.KEYCOL where TBL1.SURYO <> TBL2.SURYO and TBL1.SURYO IS NOT NULL and TBL2.SURYO IS NOT NULL が普通に考えるところでしょうかねぇ DB上のNullは扱いが少し特殊になります 演算中にNullがあると答えがNullになったりしますので 変わった方法も select Sum(IIf(TBL1.SURYO IS NULL,1,0)) AS TBL1数量Null件数, Sum(IIf(TBL2.SURYO IS NULL,1,0)) AS TBL2数量Null件数, Sum(IIf(TBL1.SURYO = TBL2.SURYO,1,0)) AS 数量一致件数, Sum(IIf(TBL1.SURYO <> TBL2.SURYO,1,0)) AS 数量不一致件数 from TBL1 inner join TBL2 on TBL1.KEYCOL = TBL2.KEYCOL こんな使い方も出来ます 条件に合えば1、合わなければ0を返すIIfを書いてそれをSumすると 条件に合う件数が分かる
その他の回答 (1)
- nda23
- ベストアンサー率54% (777/1415)
>内容が一致する件数を出力したいというのが目的です。 これとNULLを認識させる方法とは話が別なのでは? 例えば、数量別にA側の件数とB側の件数の合計が知りたいなら 次のようなSQLになります。 SELECT X.数量,X.件数 + Y.件数 AS 件数 FROM (SELECT 数量,COUNT(*) AS 件数 FROM A GROUP BY 数量) AS X INNER JOIN (SELECT 数量,COUNT(*) AS 件数 FROM B GROUP BY 数量) AS Y ON X.数量=Y.数量 一致しないものの件数なら、ON句の条件式を<>にします。 SQLでは常に件数を絞り込む方向にしないと処理速度が悪くなります。 総当たりした結果、相手側がNULLのものを数えるより、一致するものを 抽出してから件数を数える方が、一般にずっと高速です。