2016-04-26 16 views
-1

Ich versuche, eine Überprüfung durchzuführen, um zu sehen, dass, wenn 4 Spalten in Tabelle A die gleichen wie die 4 in Tabelle B sind, dann testen, ob der Wert in der fünften Spalte in beiden gleich ist . (Für 20.000-40.000) Datensätze in jeder Tabelle.MS Access/SQL Beitritt zu großen Datensätzen

Ich habe versucht, dies im Zugriff zu tun, aber es scheint zu hängen und ich kann verstehen, warum die Berücksichtigung der Datensätze ziemlich groß sind.

Ich habe versucht Joining auf den 4 Spalten in Frage und ich habe versucht, die 4 in jedem verketten und Vergleichen der Verkettungen. Das Problem ist, dass beide hängen und kein Ergebnis zurückgeben.

Kann jemand über den richtigen/einen besseren Ansatz für dieses Problem beraten?

Das einzige, was mir einfallen würde, würde die Daten zuerst bestellen, aber das könnte langsam sein und ich weiß nicht, ob Select-Abfragen früh beendet werden. Vielen Dank im Voraus.

zu langsam 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)

Zu langsam 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

Edit: Gibt es einen besseren Weg, diese Art von Kontrolle zu tun? Edit: Got zu langsam 2 zu laufen, aber es dauerte 12,5 Minuten von "nicht reagiert"

+1

Verwenden 'und' statt Kommas zwischen den Bedingungen in Ihrem' INNER JOIN' des 'ON 'clause:' TableA.ColA = TableB.ColA UND TableA.ColB = TableB.ColB' anstelle von 'TableA.ColA = TableB.ColA, TableA.ColB = TableB.ColB' Wenn Sie die Design-Ansicht von verwenden Der Access-Abfrage-Designer zum Einrichten Ihrer Joins sollte Ihnen die richtige Syntax für die ON-Klausel geben. – HansUp

+1

Fügen Sie Indizes für die Join-Felder hinzu. – HansUp

+1

Führen Sie Ihre anfänglichen Abfragetests mit kleineren Kopien dieser Datentabellen durch ... ein paar Dutzend Zeilen statt 20.000 bis 40.000. – HansUp

Antwort

0

Ich weiß nicht, wie Leistung im Vergleich zu dem, was Sie versucht haben, aber in einer ähnlichen Situation verwende ich eine UNION-Abfrage zu Richten Sie die Daten ein, eine zweite Abfrage basierend auf der UNION, um die Daten zusammenzufassen und eine 3., um die Varianzen zu erhalten. Ein zusätzliches Feature, und der Grund, warum ich es so mache, ist, dass es Datensätze in jeder Tabelle findet, die nicht mit der anderen Tabelle übereinstimmen - was ich normalerweise wissen muss. Hinweis - Ich habe 0 unter der Annahme verwendet, dass ColE numerisch ist, und Sie müssen möglicherweise die Abfragen anpassen, wenn Ihre Daten Text sind.

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 

ZUSAMMENFASSUNG:

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

VERGLEICH:

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

Dank Don George. – calh27

Verwandte Themen