首頁 > 資料庫 > mysql教程 > 如何解決MySQL使用子查詢時出現「Table Specified Twice」錯誤?

如何解決MySQL使用子查詢時出現「Table Specified Twice」錯誤?

Mary-Kate Olsen
發布: 2024-11-12 15:02:02
原創
510 人瀏覽過

How to Resolve the

MySQL 錯誤:表指定兩次

當嘗試更新表並將其用作資料來源時,MySQL 可能會發出錯誤表明該表被指定了兩次。這通常發生在使用帶有表別名的子查詢時。

例如,考慮以下查詢:

UPDATE manager AS m1
SET m1.status = 'Y'
WHERE m1.branch_id IN (
  SELECT m2.branch_id
  FROM manager AS m2
  WHERE (m2.branch_id, m2.year) IN (
    SELECT DISTINCT branch_id, year
    FROM branch_master
    WHERE type = 'finance'
  )
);
登入後複製

此查詢嘗試根據檢查某些欄位是否存在的子查詢來更新管理員表在manager 中,符合類型為「finance」的branch_master 表中的值。然而,MySQL 反對管理器表既用作目標(在 UPDATE 子句中)又用作資料來源(在子查詢中)。

要解決此問題並防止「表被指定兩次」錯誤,我們可以為子查詢使用派生表。這涉及到基於原始表創建一個臨時表,然後從該派生表中進行選擇:

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 (m2.branch_id, m2.year) IN (
    SELECT branch_id, year
    FROM branch_master
    WHERE type = 'finance'
  )
);
登入後複製

此更新的查詢正確使用派生表作為子查詢,解決了「表被指定兩次」錯誤並允許查詢成功執行。

以上是如何解決MySQL使用子查詢時出現「Table Specified Twice」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板