首頁 >資料庫 >mysql教程 >為什麼使用子查詢更新表時 MySQL 會拋出「Table Specified Twice」錯誤?

為什麼使用子查詢更新表時 MySQL 會拋出「Table Specified Twice」錯誤?

Susan Sarandon
Susan Sarandon原創
2024-11-15 02:40:02504瀏覽

Why Does MySQL Throw

MySQL 錯誤:在UPDATE 和來源中指定了兩表

當嘗試使用提供的SQL 查詢更新管理器表時,查詢更新管理器表時,查詢MySQL 遇到錯誤:「表'm1'被指定兩次,既作為'UPDATE'的目標,又作為單獨的資料來源。」出現此錯誤的原因是子查詢中兩次引用了表管理器。

可以透過修改子查詢以從派生表中進行選擇來解決該問題。此查詢不應直接使用別名 m2,而是應使用 SELECT 語句建立臨時表,然後從該臨時表中進行選擇。下面修改後的查詢實現了這一點:

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 可以正確區分 UPDATE 語句中使用的管理器表和子查詢中引用的管理器表。這消除了導致錯誤訊息的混亂。

以上是為什麼使用子查詢更新表時 MySQL 會拋出「Table Specified Twice」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn