sql 更新 where 子查询
sql update where subquery
我的运动是:
演员 HARPO WILLIAMS 被无意中输入演员 table 作为 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'
);
不幸的是抛出了错误
You can't specify target table 'actor' for update in FORM clause
我该如何解决?
你不需要子查询;只需分别匹配 first_name 和 last_name 即可更新行。以下查询还可以利用 actor
table:
上的复合索引 (first_name, last_name)
(如果已定义)的好处
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: https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=5ceb8e0d5d5837ce2ec13f18bfd103b2
只需分别匹配名字和姓氏即可更新行。我不认为子查询很重要。
我的运动是:
演员 HARPO WILLIAMS 被无意中输入演员 table 作为 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'
);
不幸的是抛出了错误
You can't specify target table 'actor' for update in FORM clause
我该如何解决?
你不需要子查询;只需分别匹配 first_name 和 last_name 即可更新行。以下查询还可以利用 actor
table:
(first_name, last_name)
(如果已定义)的好处
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: https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=5ceb8e0d5d5837ce2ec13f18bfd103b2
只需分别匹配名字和姓氏即可更新行。我不认为子查询很重要。