在開發(fā)過程中浪南,有時會遇到需要將某張表的字段值根據(jù)條件動態(tài)地更新到另一張表字段的問題豌习,即通過一張表的字段修改另一張關(guān)聯(lián)表中的內(nèi)容。比如挺尾,存在兩張表A(表名:test_a)、B(表名:test_b)站绪,他們的表結(jié)構(gòu)如下:
表A(test_a):
id | user_id | dept_id | update_time |
---|---|---|---|
1 | 34242 | 313 | |
2 | 35322 | 320 | |
3 | 35639 | 321 |
表B(test_b):
id | user_id | patient_id | dept_id | create_time |
---|---|---|---|---|
1 | 34242 | 342 | 0 | 2018-05-23 09:33:45 |
2 | 35322 | 365 | 0 | 2018-05-24 00:13:05 |
3 | 35639 | 398 | 0 | 2018-05-24 00:43:18 |
現(xiàn)在我們需要將表A的 dept_id 字段值根據(jù) user_id 字段同步到表B的 dept_id 字段中遭铺,即用表A中的 dept_id 字段數(shù)據(jù)去更新表B中的 dept_id 字段,條件是表A的 user_id 字段值與表B的 user_id 字段值相等時進行更新。
在MySQL中我們有幾種方法可以做到:
方法一:
UPDATE test_a a, test_b b
SET b.dept_id = a.dept_id
WHERE
b.user_id = a.user_id;
方法二:(通過 INNER JOIN)
UPDATE test_a a
INNER JOIN test_b b ON a.user_id = b.user_id
SET b.dept_id = a.dept_id;
方法三:(通過 LEFT JOIN)
UPDATE test_a a
LEFT JOIN test_b b ON a.user_id = b.user_id
SET b.dept_id = a.dept_id;
方法四:(通過子查詢)
UPDATE test_b b
SET dept_id = ( SELECT dept_id FROM test_a WHERE user_id = b.user_id );
上面的代碼片斷都是在兩張表之間做關(guān)聯(lián)魂挂,但只更新其中一張表的數(shù)據(jù)甫题。其實,除了更新其中一張表的數(shù)據(jù)外涂召,方法一坠非、方法二和方法三是可以同時更新兩張表的數(shù)據(jù),如:
-- 以下代碼無實際意義果正,目的是方便記錄
-- 方法一
UPDATE test_a a, test_b b
SET b.dept_id = a.dept_id, a.update_time = b.create_time
WHERE
b.user_id = a.user_id;
-- 方法二:(通過 INNER JOIN)
UPDATE test_a a
INNER JOIN test_b b ON a.user_id = b.user_id
SET b.dept_id = a.dept_id, a.update_time = b.create_time;
-- 方法三:(通過 LEFT JOIN)
UPDATE test_a a
LEFT JOIN test_b b
ON a.user_id = b.user_id
SET b.dept_id = a.dept_id, a.update_time = b.create_time;