MySQL - Tips und Tricks

Aus Wikizone
Version vom 4. April 2008, 09:07 Uhr von 193.196.133.66 (Diskussion)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

UPDATE mit Werten aus anderer Tabelle aus: http://www.tutorials.de/forum/relationale-datenbanken-sql-mysql-oracle-db2-mssql/174881-mysql-update-mit-werten-aus-anderer-tabelle.html

Datum des Zugriffs: 4.4.2008

zunächst mal: Updates über mehrere Tabellen sind grundsätzlich "tricky" (siehe dazu die MySQL-Doku, speziell die Kommentare).

Dann: Der Tabellen-Name "order" ist nicht sehr empfehlenswert, da der Interpreter diesen Namen gerne mit dem ORDER BY verwechselt, ergo muss der Tabellenname order immer als `order` geschrieben werden, sonst droht Syntax-Error.

Ein weiteres Problem ist die Gruppen-Funktion MIN() ohne GROUP BY.

So, jetzt 2 Lösungsvorschläge, einmal mit SubQuery (ab MySQL 4.1): Code:

UPDATE
 user AS u
LEFT JOIN
 (SELECT uid, MIN(datum) AS mindatum FROM `order` GROUP BY uid) AS o ON u.id = o.uid
SET
 u.createDate = o.mindatum

und einmal mit temporärer Tabelle (MySQL 4.0 und früher): Code:

DROP TABLE IF EXISTS tmp_order;

CREATE TEMPORARY TABLE tmp_order TYPE = HEAP
 SELECT uid, MIN(datum) AS mindatum FROM `order` GROUP BY uid;

UPDATE
 user
LEFT JOIN
 tmp_order ON user.id = tmp_order.uid
SET
 user.createDate = tmp_order.mindatum;

DROP TABLE IF EXISTS tmp_order;