2016-04-26 10 views
-1

テーブルAの4つの列が表Bの4つの列と同じであることを確認するためにチェックを実行しようとしています。次に、両方の5番目の列の値が同じ。 (20,000〜40,000)のレコードを各テーブルに格納します。MS Access/SQL大規模なデータセットを結合する

私はアクセスでこれをやろうとしましたが、ハングしているように見えますが、なぜデータセットがかなり大きいかを理解することができます。

私は問題の4つの列を結合しようとしましたが、それぞれを4つ連結し、連結を比較しようとしました。問題は、ハングして結果を返さないことです。

誰でもこの問題の適切な方法についてアドバイスできますか?

私が考えることのできる唯一のことは、データを最初に並べ替えることですが、遅くなる可能性があり、Selectクエリが早期に終了するかどうかわかりません。 ありがとうございます。

遅すぎる2 SELECT DISTINCT TableA.ColA & TableA.ColB & TableA.ColC & TableA.ColD AS C1, TableB.ColA, TableB.ColB, TableB.ColC, TableB.ColD AS C2, TableA.ColA, TableA.ColB, TableA.ColC, TableA.ColD, TableA.ColE, TableB.ColA, TableB.ColB, TableB.ColC, TableB.ColD, TableB.ColE FROM TableA, Table B WHERE TableA.ColA & TableA.ColB & TableA.ColC & TableA.ColD = TableB.ColA & TableB.ColB & TableB.ColC & TableB.ColD

編集1

SELECT TableA.ColA, TableA.ColB, TableA.ColC, TableA.ColD, TableA.ColE, TableB.ColA, TableB.ColB, TableB.ColC, TableB.ColD, TableB.CoLE FROM TableA INNER JOIN Table B ON(TableA.ColA = TableB.ColA, TableA.ColB =TableB.ColB, TableA.ColC = TableB.ColC, TableA.ColD = TableB.ColD)

遅すぎるは:チェックのこの種を行うには良い方法はありますか? 編集:実行に時間がかかりすぎました2、 "応答していません"の12.5分かかりました

+1

を使用し、あなたの' INNER JOIN'の中で 'ON 'TableA.ColA = TableB.ColA = TableB.ColB = TableB.ColB = TableB.ColB =' TableA.ColA = TableB.ColB'の代わりに 'TableA.ColA = TableB.ColB = Accessクエリデザイナーはあなたの結合を設定するために、あなたに 'ON'句の正しい構文を与えるべきです。 – HansUp

+1

結合フィールドに索引を追加します。 – HansUp

+1

最初のクエリテストは、これらのデータテーブルの小さなコピーを使用してください... 20,000〜40,000ではなく、数十行。 – HansUp

答えて

0

パフォーマンスはあなたの試行したものと比較しても似ていませんが、データを集計するUNIONに基づく2番目の問合せ、分散を取得する3番目の問合せを設定します。追加機能と、このようにする理由は、いずれかのテーブルで、通常は知る必要がある別のテーブルと一致しないレコードを検出することです。注 - ColEが数値であると仮定して0を使用し、データがテキストの場合はクエリを調整する必要があります。

UNION:

Select ColA, ColB, ColC, ColD, ColE as SourceA, 0 as SourceB from TableA 
    Union All Select ColA, ColB, ColC, ColD, 0, ColE from TableB 

概要:

Select ColA, ColB, ColC, ColD, sum(SourceA) as SourceA, sum(SourceB) as SourceB from UNION 

がCOMPARE: `AND`代わりに条件間のコンマの

Select ColA, ColB, ColC, ColD, SourceA, SourceB from SUMMARY where ((SourceA <> SourceB) or (SourceA is null) or (SourceB is null)) 
+0

ドン・ジョージに感謝します。 – calh27

関連する問題