MySQL 子查詢中更新同一表,如何規避沖突?

MySQL 子查詢中更新同一表,如何規避沖突?

mysql 子查詢與更新表沖突的解決之道

mysql 中,使用 delete 之類的更新語句時,會遇到一個獨特的問題:要更新的表和子查詢 from 中的表不能是同一張表。這一約束只在 mysql 中存在,其他主流數據庫并無此限制。

解決這一問題的方法是使用多表更新,其中一張表派生自需要更新的表,并使用別名引用派生表。例如,以下代碼中,select 子查詢的派生表由別名 t 引用,從而避免了直接更新和子查詢 from 表沖突的問題:

DELETE FROM sys_post WHERE post_id NOT IN (   **SELECT t.min_id FROM (**     SELECT MIN(post_id) AS min_id FROM sys_post GROUP BY post_name    **) t** );

值得注意的是,mysql 官方雖然提供了解決方法,但并未說明制定這一約束的原因。

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