克服MySQL 錯誤1093:更新FROM 子句中指定的表
嘗試更新也在其中使用的表時出現MySQL 錯誤1093同一查詢的FROM 子句。要解決此錯誤,請考慮以下方法:
將表連接到自身
如果可行,請使用適當的選擇標準將表連接到自身。這使 MySQL 能夠將表視為單獨的實體,並允許進行破壞性修改:
UPDATE tbl AS a INNER JOIN tbl AS b ON .... SET a.col = b.col
在 FROM子句中更深地巢狀子查詢
作為替代方案,巢狀子查詢深入FROM子句建立隱式臨時表:
UPDATE tbl SET col = ( SELECT ... FROM (SELECT.... FROM) AS x);
但是,這個方法效率較低,在某些版本中MySQL 的查詢最佳化器可能無法正確最佳化。
停用查詢最佳化器
在 MySQL 5.7.6 及更高版本中,最佳化器可能會防止子查詢策略。若要暫時停用最佳化,請設定 optimizationr_switch 變數:
SET optimizer_switch = 'derived_merge=off';
範例刪除查詢
要解決問題中提供的特定查詢,請將 Story_category表加入到類別表來識別和刪除損壞的條目:
DELETE t1 FROM story_category AS t1 INNER JOIN category AS t2 ON t1.category_id = t2.id WHERE t2.id IS NULL;
總之,透過使用透過這些技術,您可以克服「無法在FROM 子句中指定要更新的目標表」錯誤並對資料庫表執行必要的修改。
以上是如何修正 MySQL 錯誤 1093:「無法在 FROM 子句中指定要更新的目標表」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!