Update-Anweisung mit einer WHERE-Klausel, die Spalten mit Nullwerten enthält.

Ich aktualisiere eine Spalte in einer Tabelle mit Daten aus einer anderen Tabelle. DasWHEREie @ -Klausel basiert auf mehreren Spalten und einige der Spalten sind null. Aus meiner Sicht sind diese Nullen das, was @ isthrowing off dein StandardUPDATE TABLE SET X=Y WHERE A=B Erklärung

Sehendiese SQL-Geige der beiden Tabellen, in denen versucht wird, @ zu aktualisiertable_one basierend auf Daten vontable_two. Meine Anfrage sieht momentan so aus:

UPDATE table_one SET table_one.x = table_two.y 
FROM table_two
WHERE 
table_one.invoice_number = table_two.invoice_number AND
table_one.submitted_by = table_two.submitted_by AND
table_one.passport_number = table_two.passport_number AND
table_one.driving_license_number = table_two.driving_license_number AND
table_one.national_id_number = table_two.national_id_number AND
table_one.tax_pin_identification_number = table_two.tax_pin_identification_number AND
table_one.vat_number = table_two.vat_number AND
table_one.ggcg_number = table_two.ggcg_number AND
table_one.national_association_number = table_two.national_association_number

Die Abfrage schlägt für einige Zeilen in diesem @ fehtable_one.x wird nicht aktualisiert, wenn eine der Spalten in einer der Tabellen @ inull. Das heißt, es wird nur aktualisiert, wenn alle Spalten Daten enthalten.

Diese Frage bezieht sich auf meine früherehier auf SO, wobei ich mithilfe von @ unterschiedliche Werte aus einem großen Datensatz abgerufen haDistinct On. Was ich jetzt möchte, ist, den großen Datensatz mit einem Wert aus der Tabelle zu füllen, der eindeutige Felder hat.

AKTUALISIERE

Ich habe die erste Update-Anweisung von @binotenary verwendet. Bei kleinen Tischen läuft es blitzschnell. Beispiel ist eine Tabelle mit 20.000 Datensätzen und die Aktualisierung wurde in etwa 20 Sekunden abgeschlossen. Ein weiterer Tisch mit mehr als 9 Millionen Datensätzen läuft jedoch schon seit 20 Stunden !. Siehe unten die Ausgabe fürEXPLAIN function

Update on table_one  (cost=0.00..210634237338.87 rows=13615011125 width=1996)
  ->  Nested Loop  (cost=0.00..210634237338.87 rows=13615011125 width=1996)
    Join Filter: ((((my_update_statement_here))))
    ->  Seq Scan on table_one  (cost=0.00..610872.62 rows=9661262 width=1986)
    ->  Seq Scan on table_two  (cost=0.00..6051.98 rows=299998 width=148)

DasEXPLAIN ANALYZE Option hat auch ewig gedauert, also habe ich es abgesagt.

Haben Sie Ideen, wie Sie diese Art der Aktualisierung beschleunigen können? Auch wenn dies bedeutet, dass eine andere Update-Anweisung oder eine benutzerdefinierte Funktion zum Durchlaufen und Ausführen des Updates verwendet wird.

Antworten auf die Frage(10)

Ihre Antwort auf die Frage