1
votes

mise à jour sql où sous-requête

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?


0 commentaires

3 Réponses :


4
votes

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'


0 commentaires

0
votes

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>


0 commentaires

0
votes

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.


0 commentaires