Mysql
 sql >> Base de données >  >> RDS >> Mysql

mysql :mise à jour avec sous-requête,

Si vous souhaitez mettre à jour toutes les lignes dans les data table, vous pouvez faire quelque chose comme ceci :

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

REMARQUES :

S'il y a plusieurs lignes dans node avec la même valeur pour title , qui correspond à un name dans data , il est indéterminé laquelle de ces lignes la valeur de nid sera attribué à partir de.

S'il y a des valeurs de name dans les data table qui ne se trouvent pas dans le node tableau (dans le title colonne), alors une valeur NULL sera attribuée à l'id colonne.

Certaines modifications apportées à la requête peuvent modifier ce comportement.

Il est possible d'accomplir cela en utilisant une sous-requête, mais j'utiliserais simplement une opération de jointure. Je pense que vous pourriez utiliser une sous-requête corrélée, comme celle-ci :

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