2つのテーブルにある item をキーに、

  [TableA]に存在して、[TableB]に存在しないもの
を抽出したい。

次のような大量データをさばこうとすると
無応答に近い形で一向に結果が得られません。
効率的(現実的)な方法ってありますか?
(そもそもクエリのみでは非現実的なのでしょうか?)

[TableA]38,000 件(フィールド数:42個)
[TableB] 73,000 件(フィールド数: 4個)
[Out]フィールドは item(テキスト255バイト) のみの定義で
   データは空で作成済み

INSERT INTO [Out]
SELECT DISTINCT [TableA].item FROM [TableA] WHERE [TableA].item Not In (SELECT
DISTINCT [TableB].item FROM [TableB]);

---
MS Access 2002

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:takejin No.1

回答回数1543ベストアンサー獲得回数203

ポイント10pt

クエリをSQL表示にすると、以下のようになりましたが。


INSERT INTO Out ( item )

SELECT TableA.item

FROM TableA LEFT JOIN TableB ON TableA.item = TableB.item

WHERE (((TableB.item) Is Null));


[Out]はテーブルですね。

id:inosisibeyan No.2

回答回数211ベストアンサー獲得回数0

ポイント10pt

私なら、テンポラリーテーブルを作ってから、クエリーを行いますが、そもそも時間が掛かるのはデータが多いと言うのが原因のようですので、減らして実行が基本です。

経験則ですが、Aのデータ総量とBのデータ総量を掛け合わせた位の時間が掛かるものです。

ですので、ここではitemをそれぞれ抽出したテーブルでクエリーを行い、それでキーを求め、そのキーから再度クエリーを行う方が現実的です。

又、お金に糸目を付けないやり方なら、ハードウエアを贅沢にすると、時間的に早くなりますがこれこそ、非現実的です。

id:web_nao No.3

回答回数7ベストアンサー獲得回数0

ポイント40pt

http://www.geocities.jp/mickindex/database/db_optimize.html#Loca...

SQLを速くするぞ―お手軽パフォーマンス・チューニング

(not )inよりは(not )existsの方が速いです。

http://www11.plala.or.jp/studyhall/access/sql03.html

プログラム学習室 Access SQL

いちばん下に例があります。

id:P-mako

ありがとうございます。1つ目、2つ目のURLともにかなり有力な情報です。

(今回に限らず役立ちそうです)

2005/10/27 20:57:58

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません