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

SQL 跨表/同表欄位資料複製:UPDATE JOIN、子查詢、EXISTS 五種寫法

     編輯:MySQL 資料庫相關知識

將某欄位資料複製到另一張表或同表另一欄位。本文提供 5 種 SQL 寫法:UPDATE ... LEFT JOIN、UPDATE ... FROM JOIN、相關子查詢、EXISTS 子查詢、INNER JOIN 同步更新,含同表複製簡化語法。

場景:跨表複製(同主鍵/關聯鍵)

寫法 1:LEFT JOIN + WHERE IS NULL(同步缺漏)

UPDATE file_manager_folder f1
LEFT JOIN file_manager_folder f2
  ON f1.name = f2.name AND f2.parentId = 54
SET f1.parentId = 54
WHERE f2.name IS NULL AND f1.id IN (1,2,3);

寫法 2:UPDATE ... FROM JOIN(SQL Server / PostgreSQL)

UPDATE B
SET extra = A.extra
FROM A
JOIN B ON A.id = B.id;

寫法 3:相關子查詢(通用,需確保唯一)

UPDATE b
SET b.sms = (SELECT a.sms FROM a WHERE a.id = b.id);

寫法 4:EXISTS 保護(避免子查詢多行報錯)

UPDATE A
SET A.SMS = (SELECT B.SMS FROM B WHERE A.ID = B.ID)
WHERE EXISTS (SELECT 1 FROM B WHERE A.ID = B.ID);

寫法 5:INNER JOIN 同步更新(MySQL/標準)

UPDATE tb_1
INNER JOIN tb_2 ON tb_1.tid = tb_2.tid
SET tb_1.tcontent = tb_2.tcontent;

同表欄位複製(極簡)

-- 將 A 欄位複製到 B 欄位
UPDATE article SET B = A;

-- 一般寫法
UPDATE tb_1 SET content_target = content_source;

-- 帶條件
UPDATE {table} SET {target} = {source} WHERE {condition};

⚠️ 關鍵注意事項

  • 子查詢寫法**必須保證回傳單一值**,否則報錯 Subquery returns more than 1 row
  • 大量更新分批處理(LIMIT 5000 或主鍵範圍),避免長鎖定
  • 更新前先 SELECT 驗證影響筆數與資料正確性
  • 完成後考慮 ANALYZE TABLE 更新統計資訊
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved