Mysql sql更新where子查询
我的练习是: 演员哈波·威廉姆斯(HARPO WILLIAMS)被意外地作为格劳乔·威廉姆斯(GROUCHO WILLIAMS)输入演员表。编写查询以修复记录 因此,我试图通过以下方式对其进行查询: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_
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:只需分别匹配名字和姓氏即可更新行。我认为子查询并不重要 只需分别匹配名字和姓氏即可更新行。我认为子查询并不重要