簡體   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