Mysql sql更新where子查询

Mysql sql更新where子查询,mysql,sql,sql-update,sql-subselect,Mysql,Sql,Sql Update,Sql Subselect,我的练习是: 演员哈波·威廉姆斯(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_

我的练习是:

演员哈波·威廉姆斯(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'
 );
不幸的是,错误被抛出

不能在FORM子句中为update指定目标表“actor”


我该如何解决这个问题?

您不需要对此进行子查询;只需分别匹配first_name和last_name即可获得要更新的行。下面的查询还可以利用
actor
表上的复合索引
(名字、姓氏)
(如果已定义):

update actor
set actor.first_name = 'HARPO'
where actor.first_name = 'GROUCHO' 
       AND actor.last_name = 'WILLIAMS'

您不需要对此进行子查询;只需分别匹配first_name和last_name即可获得要更新的行。下面的查询还可以利用
actor
表上的复合索引
(名字、姓氏)
(如果已定义):

update actor
set actor.first_name = 'HARPO'
where actor.first_name = 'GROUCHO' 
       AND actor.last_name = 'WILLIAMS'

不要对此使用子查询,您可以使用简单更新或类似的方式

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:

不要为此使用子查询,您可以使用简单更新或类似的方式

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:

只需分别匹配名字和姓氏即可更新行。我认为子查询并不重要

只需分别匹配名字和姓氏即可更新行。我认为子查询并不重要