[英]sql update where subquery
我的練習是:
演員 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 子句中指定目標表“演員”進行更新
我該如何解決?
您不需要子查詢; 只需分別匹配 first_name 和 last_name 以獲取要更新的行。 以下查詢還可以利用actor
表上的復合索引(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 鏈接: https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=5ceb8e0d5d5837ce2ec13f18bfd103b2
只需分別匹配名字和姓氏即可更新行。 我不認為子查詢很重要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.