表指定兩次:解決MySQL 中的更新衝突
當嘗試更新既作為更新目標又作為單獨的目標的表時資料來源,MySQL 可能會引發錯誤「表'table_name' 被指定兩次,既作為'UPDATE'的目標,又作為單獨的資料來源。
具體來說,此錯誤訊息表明管理器表既用作 UPDATE 操作的目標表,又用作選擇的資料來源來自branch_master 表的資料。這種雙重引用會讓 MySQL 感到困惑。
解決方案
解決方案是將資料來源中的資料表隔離為衍生表,而派生表則是在飛來保存原始表中的資料。透過這樣做,您可以避免查詢中出現歧義。
將查詢中的以下行:
FROM manager AS m2
替換為:
FROM (select * from manager) AS m2
這將建立一個名為m2 的衍生表,包含原始管理器表中的所有數據。
已更新查詢
以下是更新後的查詢,將解決表衝突錯誤:
UPDATE manager SET status = 'Y' WHERE branch_id IN ( select branch_id FROM (select * from manager) AS m2 WHERE (branch_id, year) IN ( SELECT branch_id, year FROM branch_master WHERE type = 'finance' ) );
透過使用派生表,您可以確保管理器表僅在您的查詢,防止MySQL 遇到「表指定兩次」錯誤。
以上是如何修復 MySQL UPDATE 查詢中的「Table Specified Twice」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!