気ままなコメント >> SQLServer >> テーブルの比較(SQLServer)

テーブルの比較(SQLServer)

| コメント(2) | トラックバック(0)

SQLServerにて同一項目のテーブルが正しいか
比較する場合、いくつかの方法があります。

1つ目は、CSVに保存し、テキスト比較する方法。
両方のテーブルを同じソート順にてCSVに落とし、ファイル比較を行う。
DFというフリーソフトが便利でいいですね。
http://www.vector.co.jp/vpack/browse/person/an005630.html
違いがあれば色が変わって表示されます。


2つ目は、テーブルをキー項目で連結しチェックする方法。

SELECT A.項目 FROM テーブルA A
 LEFT JOIN テーブルB B
  ON A.キー項目 = B.キー項目
 WHERE A.比較項目 <> B.比較項目


但し、テーブルAに存在しないデータは抽出されません。
テーブルAに存在しないデータを抽出するには

SELECT B.項目 FROM テーブルB B
 LEFT JOIN テーブルA A
  ON A.キー項目 = B.キー項目
 WHERE A.キー項目 IS NULL


とします。


3つ目は、テーブルをEXISTSで抽出する方法。
これでテーブルAにあるがテーブルBにないレコードをチェックできます。

SELECT * FROM テーブルA A
 WHERE NOT EXISTS (
  SELECT 項目 FROM テーブルB B
  WHERE A.キー項目 = B.キー項目
   AND A.比較項目 = B.比較項目
 )



4つ目は、テーブルをUNIONで連結する方法。

SELECT COUNT(*) FROM (
 SELECT * FROM テーブルA
 UNION 
 SELECT * FROM テーブルB
)


このSQLにて重複レコードがまとめられますので
テーブルA件数 = テーブルB件数 = 結果件数
となればすべて等しいと判断できます。

トラックバック(0)

トラックバックURL: http://wakux2.com/mt/mt-tb.cgi/558

コメント(2)

テストの参考にさせていただきました。
ありがとうございました。
ちなみに下記の記事ですが、UNION ALLだと重複行がまとめられず
全件表示されました。
ALLを抜いたところうまくいきました。
指摘が重複していましたら申し訳ございません。

>4つ目は、テーブルをUNIONで連結する方法。
>SELECT COUNT(*) FROM (
> SELECT * FROM テーブルA
> UNION ALL
> SELECT * FROM テーブルB
>)

>このSQLにて重複レコードがまとめられますので
>テーブルA件数 = テーブルB件数 = 結果件数
>となればすべて等しいと判断できます。

少しでも参考になり良かったです。
さらにご指摘ありがとうございます。
早速修正しました。

コメントする

アーカイブ

このブログ記事について

このページは、wakuwakuが2006年5月 5日 19:53に書いたブログ記事です。

ひとつ前のブログ記事は「日付での抽出方法」です。

次のブログ記事は「ジャレコ(7954)(BlogPet)」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。


since 2005/03/10