繁体   English   中英

带子查询的MySQL更新语句

[英]MySql update statement with subquery

请看一下我在MySql Workbench中编写的以下语句:

update customer set flag = 1
where id in (select id from customer
group by phoneNumber
having count(phoneNumber) > 1);

显示以下消息:

Error Code: 1093. You can't specify target table 'customer' for update in FROM clause

我究竟做错了什么?

尝试:

  update customer set flag = 1
  where id in (select * from (select id from customer
  group by phoneNumber
  having count(phoneNumber) > 1)t ) ;

这是另一个尝试避免陷阱的变体(我使用了stmt的另一个组,请参见下文。它可能无法反映您正在尝试执行的操作):

update customer a
join ( select id
   from customer b
   group by id
   having count(1) > 1 
) b on a.id = b.id
    set a.flag = 1;

您的部分select id from customer group by phoneNumber的语句是mysql的另一个怪癖。 在sql92中,它是无效的,并且除非id在功能上取决于电话号码,否则它在sql99及更高版本中也是无效的。 您可以通过在@@ sql_mode中设置ONLY_FULL_GROUP_BY来强制执行更严格的行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM