在 MySQL 中,可以通過關聯更新(UPDATE JOIN)基于一個表的數據更新另一個表的字段,這在需要根據關聯條件同步數據時非常實用。
UPDATE 表1
JOIN 表2 ON 表1.關聯字段 = 表2.關聯字段
SET 表1.字段1 = 表2.字段1,
表1.字段2 = 表2.字段2 + 100
[WHERE 條件];
假設有兩個表:
-
users 表:存儲用戶基本信息(id, name, city)
-
user_profiles 表:存儲用戶詳細信息(user_id, address, city)
現在需要根據 user_profiles 表的 city 字段更新 users 表的 city 字段:
UPDATE users
JOIN user_profiles ON users.id = user_profiles.user_id
SET users.city = user_profiles.city
WHERE user_profiles.city IS NOT NULL;
也可以關聯多個表進行更新:
UPDATE orders o
JOIN users u ON o.user_id = u.id
JOIN regions r ON u.region_id = r.id
SET o.shipping_fee = r.base_fee * 1.1
WHERE r.country = 'China';
-
關聯條件(ON 子句)必須明確,否則可能導致全表更新
-
建議先使用 SELECT 語句驗證關聯結果:
SELECT users.id, users.city, user_profiles.city
FROM users
JOIN user_profiles ON users.id = user_profiles.user_id
WHERE user_profiles.city IS NOT NULL;
-
可以使用 LEFT JOIN 確保即使右表無匹配也能更新(此時右表字段為 NULL)
關聯更新是處理表間數據同步的高效方式,比逐條更新更節省資源。