sql更新子查询

时间:2019-09-22 06:27:16

标签: mysql sql sql-update sql-subselect

我的锻炼是:

演员HARPO WILLIAMS是偶然在GRANTCHO 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子句中指定要更新的目标表'actor'

我该如何解决?

3 个答案:

答案 0 :(得分:4)

您不需要子查询;只需分别匹配first_name和last_name即可更新该行。以下查询还可以利用(first_name, last_name)表上的复合索引actor(如果已定义)的好处:

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

答案 1 :(得分:0)

请勿为此使用子查询,您可以使用简单的更新或类似的方法

    sh """ 
    #!/bin/bash
    cd /Users/igor/.jenkins/workspace/MobileAppsPipeline/ios
    ls -l
    /usr/local/bin/fastlane build_and_push
    """ 

数据库链接:https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=5ceb8e0d5d5837ce2ec13f18bfd103b2

答案 2 :(得分:0)

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