簡體   English   中英

sql 更新where子查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM