在MySQL中,UPDATE JOIN語句可以包含ORDER BY嗎?

在MySQL中,UPDATE JOIN語句可以包含ORDER BY嗎?

mysql中,使用update join時,帶有order by會導致mysql崩潰嗎?

在mysql中,不能在帶有join的update語句中使用order by。這會導致mysql內部錯誤,甚至導致mysql崩潰。

原因

當update語句中包含join時,mysql將執行以下操作:

  1. 評估join條件,將匹配的記錄分組。
  2. 對于每個匹配的組,執行update操作。

order by子句用于對結果集進行排序。但是,在帶有join的update語句中,order by無法保證哪個組將首先被更新。這可能會導致mysql內部錯誤或崩潰。

修復方法

為了修復此問題,必須使用子查詢或臨時表來對記錄進行排序:

使用子查詢:

update cfg_dev_network_push_status t1 set ... where (t1.id, t1.push_status, t1.push_retry_times) in (     select id, push_status, push_retry_times     from (         select id, push_status, push_retry_times         from cfg_dev_network_push_status         join cfg_dev_network_bind_status on ...         order by push_status desc, push_retry_times desc, id asc     ) as subquery );

使用臨時表:

CREATE TEMPORARY TABLE tmp_sort AS SELECT id, push_status, push_retry_times FROM cfg_dev_network_push_status JOIN cfg_dev_network_bind_status ON ... ORDER BY push_status DESC, push_retry_times DESC, id ASC;  UPDATE cfg_dev_network_push_status t1 SET ... WHERE (t1.id, t1.push_status, t1.push_retry_times) IN (     SELECT id, push_status, push_retry_times FROM tmp_sort );

? 版權聲明
THE END
喜歡就支持一下吧
點贊14 分享