SQL根據一個表的字段的值更新另一個表的字段
UPDATE table_1 t1 left join table_2 t2 on t2.id = t1.tid SET t1.username = t2.uname
where t1.id>5;
參考的例子如上,基於參考例子自己實踐運用如下:
本人實際案例把t1表的省市區中文名稱替換為代碼
t2表為省市區字典表
UPDATE t_yangtze_controls t1
left join t_sys_area t2 on t1.county = t2.`NAME` SET t1.county = t2.AREA_ID
WHERE INSTR(t1.`county`,t2.`name`)>0 #這個條件是為了防止不匹配的變為null
# 模糊匹配 PS:待轉換為 '格爾木' 省市區表為'格爾木市'
UPDATE t_yangtze_pollution_ewp t1
LEFT JOIN t_sys_area t2
ON t2.`NAME` LIKE CONCAT(t1.county, '%' ) SET t1.county = t2.AREA_ID
WHERE INSTR(t2.`name`,t1.`county`)>0;
INSTR(str,substr)
返回substrstring 中 第一次出現 substring 的位置 str。這與 的雙參數形式相同LOCATE(),只是參數的順序顛倒了。
mysql> SELECT INSTR('foobarbar', 'bar');
-> 4
mysql> SELECT INSTR('xbar', 'foobar');
-> 0
此函數是多字節安全的,並且僅當至少一個參數是二進制字符串時才區分大小寫。
單張表自聯,多表關聯更新都可以。