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