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