Google weiß alles: Join bei Update

Beitrag lesen

Folgendes soll das Script nun erledigen:

Gehe in die Tabelle „produkte“ schnapp dir dort eine Artikelnummer, gehe mit dieser in die Tabelle „preise“ schau dort nach der zuvor aufgenommen Artikelnummer, schnapp dir den dazugehörigen Preis und führe in der Tabelle „produkte“ ein Update durch.

Das Problem ist die hohe Anzahl der Schleifendurchläufe, kombiniert mit mit der resultierenden hohen Anzahl an einzeln übermittelten SQL-Anweisungen. Womöglich gibt es weitere Probleme infolge fehlender Indexierung der Tabellen und/oder das eines "weit entfernten" Datenbankservers. Nur dann kann bei diesen Zeilenzahlen ein TimeOut erfolgen.

Hier die Lösung:

Sende genau einen Befehl an die Datenbank und überlasse lasse dieser die "Durchläufe". Dazu ist ein Join zu bauen, hier reicht ein implizierter:

Tabelle test_preise vorher:

Alternativ-Text

Tabelle test_produkte vorher:

Alternativ-Text

sql:

UPDATE test_produkte, test_preise
 SET test_produkte.preis = test_preise.preis
 WHERE test_produkte.artikelnummer = test_preise.artikelnummer
 AND  test_produkte.preis <> test_preise.preis

Tabelle test_produkte danach:

Alternativ-Text

Das war wohl gefragt...