Mise à jour de plusieurs tables via LEFT JOIN dans MySQL
Question :
Comment pouvez-vous mettre à jour champs dans une table en utilisant un LEFT JOIN sur plusieurs tables ? Considérons un scénario dans lequel vous souhaitez mettre à jour toutes les lignes de l'ensemble de résultats à partir de la requête LEFT JOIN suivante :
SELECT T1.* FROM T1 LEFT JOIN T2 ON T1.id = T2.id WHERE T2.id IS NULL
Réponse :
MySQL vous permet d'effectuer une MISE À JOUR instructions utilisant n'importe quel type de jointure pris en charge dans les instructions SELECT, y compris LEFT JOIN. La syntaxe appropriée est la suivante :
UPDATE t1 LEFT JOIN t2 ON t2.id = t1.id SET t1.col1 = newvalue WHERE t2.id IS NULL
Notez que pour de meilleures performances dans une instruction SELECT, envisagez d'utiliser la syntaxe NOT IN / NOT EXISTS :
SELECT t1.* FROM t1 WHERE t1.id NOT IN ( SELECT id FROM t2 )
Pour plus de détails sur les performances, reportez-vous à cet article : Recherche de commandes incomplètes : performances de LEFT JOIN par rapport à NOT IN.
Cependant, MySQL ne prend pas en charge l'utilisation de la table cible dans une sous-requête au sein d'un Instruction UPDATE. Ainsi, vous devez vous fier à la syntaxe LEFT JOIN, moins efficace, pour les mises à jour impliquant plusieurs tables.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!