首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 表間數據更新:解決 UPDATE ... FROM 語法不兼容問題

     編輯:MySQL 資料庫相關知識

問題背景

在資料庫開發中,經常遇到需要根據另一張表的數據來更新當前表的場景。假設有兩張表:

  • 表 a(id, sex, email, public)
  • 表 b(id, depart, salary)

因業務變更,需為表 b 新增 public 欄位,並使其值與表 a 中相同 id 記錄的 public 值保持一致。

常見誤區:SQL Server 語法在 MySQL 中失效

許多開發者習慣寫法如下:

UPDATE b SET public = a.public FROM a WHERE b.id = a.id

但在 MySQL 執行時會報錯。原因在於 MySQL 不支援 UPDATE 語句中的 FROM 子句,上述寫法適用於 SQL Server、PostgreSQL 等資料庫。

MySQL 正確寫法:多表連接更新

MySQL 支援在 UPDATE 中直接列出多張表,並透過 WHERE 條件關聯:

UPDATE b, a SET b.public = a.public WHERE b.id = a.id

或使用 INNER JOIN 語法(更符合 ANSI SQL 標準,可讀性更強):

UPDATE b
INNER JOIN a ON b.id = a.id
SET b.public = a.public;

補充說明

  • 執行前請確認 id 欄位有索引,否則大數據量下會全表掃描,效能極差。
  • 若 b 表尚未建立 public 欄位,需先 ALTER TABLE b ADD COLUMN public VARCHAR(255);(型別依實際情況調整)。
  • 更新前建議先用 SELECT 驗證關聯結果:
    SELECT b.id, a.public FROM b INNER JOIN a ON b.id = a.id;

總結

MySQL 表間更新的核心在於「多表列在 UPDATE 後,用 WHERE 或 JOIN 關聯」。記住這一點,即可避開 FROM 子句陷阱,高效完成跨表數據同步。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved