Mon exercice est:
L'acteur HARPO WILLIAMS a été accidentellement entré dans la table des acteurs en tant que GROUCHO WILLIAMS. Écrivez une requête pour corriger l'enregistrement.
donc j'essaye de l'interroger par:
update actor set actor.first_name = 'HARPO' where actor_id in ( select actor.actor_id from actor where concat(actor.first_name, ' ', actor.last_name) = 'GROUCHO WILLIAMS' );
malheureusement une erreur est générée p >
Vous ne pouvez pas spécifier la table cible 'acteur' pour la mise à jour dans la clause FORM
Comment puis-je résoudre ce problème?
3 Réponses :
Vous n'avez pas besoin de sous-requête pour cela; il suffit de faire correspondre le prénom et le nom séparément pour obtenir la ligne à mettre à jour. La requête suivante peut également utiliser l'avantage de l'index composite (prénom, nom)
(si défini) sur la table acteur
:
update actor set actor.first_name = 'HARPO' where actor.first_name = 'GROUCHO' AND actor.last_name = 'WILLIAMS'
N'utilisez pas de sous-requête pour cela, vous pouvez utiliser une simple mise à jour ou autre chose comme ceci,
UPDATE actor AS s, (SELECT id FROM actor WHERE fname='GROUCHO' AND lname = 'WILLIAMS') AS p SET s.fname = 'HARPO' WHERE s.id = p.id;
DB FIDDLE LINK: https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=5ceb8e0d5d5837ce2ec13f182bfd103bp>
Faites simplement correspondre le prénom et les noms séparément pour mettre à jour la ligne. Je ne pense pas que la sous-requête soit importante.