SQL обновление, где подзапрос - PullRequest
1 голос
/ 22 сентября 2019

Мое упражнение:

Актер HARPO WILLIAMS был случайно введен в таблицу актеров как GROUCHO WILLIAMS.Напишите запрос для исправления записи.

, поэтому я пытаюсь запросить его по:

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'
 );

к сожалению, ошибка выдается

Вы можете'не указывать целевую таблицу' actor 'для обновления в предложении FORM

Как это исправить?

Ответы [ 3 ]

4 голосов
/ 22 сентября 2019

Вам не нужен подзапрос для этого;просто сопоставьте first_name и last_name отдельно, чтобы получить строку для обновления.Следующий запрос также может использовать преимущество составного индекса (first_name, last_name) (если он определен) для таблицы actor:

update actor
set actor.first_name = 'HARPO'
where actor.first_name = 'GROUCHO' 
       AND actor.last_name = 'WILLIAMS'
0 голосов
/ 22 сентября 2019

Просто сопоставьте имя и фамилию отдельно, чтобы обновить строку.Я не думаю, что подзапрос важен.

0 голосов
/ 22 сентября 2019

Не используйте подзапрос для этого, вы можете использовать простое обновление или что-то подобное,

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=5ceb8e0d5d5837ce2ec13f18bfd103b2

...