Mysql
 sql >> Datenbank >  >> RDS >> Mysql

mysql:Update mit Unterabfrage,

Wenn Sie alle Zeilen in den data aktualisieren möchten Tabelle können Sie etwa so vorgehen:

UPDATE data
  LEFT
  JOIN node
    ON node.title = data.name
   SET data.id = node.nid

HINWEISE:

Wenn es mehrere Zeilen in node gibt mit demselben Wert für title , der einem name entspricht in data , ist es unbestimmt, welche dieser Zeilen den Wert von nid hat wird zugewiesen von.

Wenn es Werte von name gibt in den data Tabelle, die nicht im node gefunden werden Tabelle (im title Spalte), dann wird der id ein NULL-Wert zugewiesen Spalte.

Einige Optimierungen an der Abfrage können dieses Verhalten ändern.

Es ist möglich, dies mit einer Unterabfrage zu erreichen, aber ich würde nur eine Join-Operation verwenden. Ich denke, Sie könnten eine korrelierte Unterabfrage wie diese verwenden:

UPDATE data
   SET data.id = ( SELECT node.nid
                     FROM node
                    WHERE node.title = data.name
                    ORDER BY node.nid
                    LIMIT 1
                 )