问题现象:
今天想到了一个这样的需求,如何用sql语句更新某个表所有记录的指定列数据为另一列(另一个表的指定列)数据?
问题分析:
从问题的需求可举例如下:
第一种: 假如现在有一个表 T 含有包括 id , t_id 在内的多个字段;
现在想把 T 表 中 所有记录 的 id字段 这一列的数据, 修改为 T 表 的 t_id字段 这一列的数据;
(也就是将每一条记录的 id字段的值 修改为 t_id字段的值)
第二种: 假如现在有两个表 A , B : 其中 A表 含有 id 字段, 但不含有 t_id 字段; B表 含有 id , t_id 字段;
现在想把 A 表 中 所有记录 的 id字段 这一列的数据, 修改为 B 表 的 t_id字段 这一列的数据;
(也就是将 A 表 中每一条记录的 id字段的值 修改为 B 表 中 t_id字段的值)
以上两种情况在学习工作中,很多小伙伴都会遇到过;这里我们先分析一下这两种情况的情况:
1.第一种是单个表中已经有了两个字段(id 和 t_id), 因此只需要基于单表做 update 操作即可;
2.第二种需要操作两个表,因为 A表 没有 t_id字段, 同时这两个表必然要有联系(A, B表都有id字段, 且A中所有的id在B中都能找到)才能进行修改成功.
解决方法:
第一种(单表操作): 执行以下代码即可:
update T
set id = t_id
第二种(多表操作): 代码如下:
update A
set id = B.qx_id (或 set A.id = B.qx_id )
from B
where A.id = B.id