Ich bin ja kein SQL-Guru. Also freue ich mich immer noch, wenn ich Möglichkeiten entdecke, von denen ich bislang ausgegangen bin, dass sie nicht funktionieren. Man kann in einem MySQL-UPDATE Statement ja durchaus mit Subselects arbeiten. Bislang hatte ich es aber nie hinbekommen, einen Schlüssel des Grundstatements im Subselect-Statement zu nutzen. Es funktioniert aber und zwar so ( wahrscheinlich auch anders, aber ich will es mir so merken und die Spezialisten dürfen sich dann auch gerne in den Kommentaren austoben):
UPDATE table1 t1
SET t1.val1 =
(SELECT val FROM table2 t2 WHERE t2.id = t1.t2_id )
WHERE t1.val1 = '';
13. Februar 2009 um 15:10 Uhr
Vielen Dank für deinen Ansatzt und er hat mir sehr geholfen über 1000 Datensätze mit einem Statement upzudaten 😀
7. Juli 2009 um 14:48 Uhr
Danke für deine kurze und hilfreiche Beschreibung. Hat mir weitergeholfen!
7. Juli 2009 um 18:04 Uhr
Gern geschehen!
20. Januar 2011 um 11:39 Uhr
Achtung: mit deinem Statement werden in table1 auch Datensätze geupdatet, die in table2 nicht vorhanden sind. table1.val1 wird hier also mit null gefüllt.
15. Juni 2012 um 14:20 Uhr
Einfach, aber genial !!!
23. August 2012 um 14:43 Uhr
Auch ein Danke von mir – ist eine kleine, schlaue Sache
Aber: Wie verhindere ich, dass auch dann ein Update erfolgt, wenn das Subselect keinen Treffer landet – also NULL zurück gibt?
Vielen Dank!
Arno
3. September 2013 um 13:49 Uhr
Hi !
Hatte dasselbe Problem. Ihr müsst nur den subselect in COALESCE(( [subselect] ),0) einschließen. Das bewirkt dass der erste Nicht-NULL-Wert verwendet wird. In meinem Fall Integer 0. Ist vielleicht nicht für jeden Anwendungsfall zu gebrauchen, weil der Datensatz auf jedenfall geupdatet wird, aber zumindest ist das NULL-Problem behoben.
Grüße,
Tariin