錯誤:在MySQL 查詢中指定了兩次表
在MySQL 中,當嘗試更新表並同時將其用作數據來源時相同的查詢,可能會出現錯誤「表'm1'被指定兩次,既作為'UPDATE'的目標,又作為單獨的資料來源」。此錯誤源自於 MySQL 在處理此類查詢時的限制。
為了解決此問題,MySQL 要求使用者從衍生表中進行選擇,而不是直接在子查詢中使用表格的別名。這涉及到基於原始表創建臨時表並在子查詢中引用派生表。
修訂的查詢:
這裡是查詢的修訂版本:利用派生表來規避錯誤:
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' ) );
透過從派生表中選擇(由“(SELECT * FROM manager) AS m2”),該查詢避免了導致先前錯誤的歧義。派生表充當獨立的資料來源,使查詢能夠引用該表,既作為更新的目標,又作為子查詢的資料來源。
以上是如何解決MySQL更新和查詢同一個表格時出現「Table Specified Twice」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!