powerbook_blog

klein, praktisch, unverdaulich seit 2004

MySQL: Update mit Subselect und Keys zwischen den Tabellen

| 7 Kommentare

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 = '';

7 Kommentare

  1. Vielen Dank für deinen Ansatzt und er hat mir sehr geholfen über 1000 Datensätze mit einem Statement upzudaten 😀

  2. Danke für deine kurze und hilfreiche Beschreibung. Hat mir weitergeholfen! :-)

  3. 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.

  4. Einfach, aber genial !!!

  5. 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

  6. 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

Schreib einen Kommentar

Pflichtfelder sind mit * markiert.