如何将另一张表的一条数据更新到另一条

时间:2021-12-29 14:48:11
我有这么个需求 需要将B表的一条数据更新到A表 这两张表字段一样而且字段数量很多  有没有什么比较简单的sql语句可以做到?
如果直接写update的话set的字段要写太多了  有没有像添加那样的可以直接根据一条数据更新?

12 个解决方案

#1


先删除再插入

#2


如果要更新很多列,先删除在插入比较简单

#3


想了下  
先将要更新的数据插入到A表中 然后将要替换的数据先查询出来然后获取到一些不需要更新的数据 去修改那个新插入的数据再把原始数据删除? 这样的话  怎么样呢?

#4


如何将另一张表的一条数据更新到另一条

#5


引用 3 楼 aiku930209 的回复:
想了下  
先将要更新的数据插入到A表中 然后将要替换的数据先查询出来然后获取到一些不需要更新的数据 去修改那个新插入的数据再把原始数据删除? 这样的话  怎么样呢?

还不如先删除后插入呢

#6


引用 5 楼 sinat_28984567 的回复:
Quote: 引用 3 楼 aiku930209 的回复:

想了下  
先将要更新的数据插入到A表中 然后将要替换的数据先查询出来然后获取到一些不需要更新的数据 去修改那个新插入的数据再把原始数据删除? 这样的话  怎么样呢?

还不如先删除后插入呢


但我要保留A表原始数据的像主键之类的字段的数据

#7


引用 6 楼 aiku930209 的回复:
Quote: 引用 5 楼 sinat_28984567 的回复:

Quote: 引用 3 楼 aiku930209 的回复:

想了下  
先将要更新的数据插入到A表中 然后将要替换的数据先查询出来然后获取到一些不需要更新的数据 去修改那个新插入的数据再把原始数据删除? 这样的话  怎么样呢?

还不如先删除后插入呢


但我要保留A表原始数据的像主键之类的字段的数据

要不就动态拼接sql语句,把所有字段都读取拼接到一个update语句中

#8


要用主键去关联更新

#9


引用 8 楼 xiaoxiangqing 的回复:
要用主键去关联更新

两张表不存在主外键  A表是一些人物信息表  B就是一些提前准备好大量的人物信息  然后可以从B表中随机获取一条然后将这个人物的信息填充到A表的某个人物中

#10


又不是次次都要重新写,你只写1次在程序里面,这里赖做什么。。。

#11


引用 楼主 aiku930209 的回复:
我有这么个需求 需要将B表的一条数据更新到A表 这两张表字段一样而且字段数量很多  有没有什么比较简单的sql语句可以做到?
如果直接写update的话set的字段要写太多了  有没有像添加那样的可以直接根据一条数据更新?


试试这个方法
要实现两个表之间的数据的自动更新,可以采用触发器来实现,触发器的实现方法:
1、A表有数据更新的时候自动更新B表:
create or replace trigger tg after update on A for each row  ---如果不需要每条数据都跟新,只需要在每次A更新的时候更新B,可以将后面的for each row去掉。
begin
update B set xx=xx where b.aid = a.id;
end;
/
2、A表插入数据时,B表更新数据:
create or replace trigger tgg after insert on A for each row
begin
insert B values(xxxx);
end;
/

#12


update A
set A.name = B.name ……………………
from B where B.sn = A.sn

字段都写好,很费时间?,你也1024个字段呀

#1


先删除再插入

#2


如果要更新很多列,先删除在插入比较简单

#3


想了下  
先将要更新的数据插入到A表中 然后将要替换的数据先查询出来然后获取到一些不需要更新的数据 去修改那个新插入的数据再把原始数据删除? 这样的话  怎么样呢?

#4


如何将另一张表的一条数据更新到另一条

#5


引用 3 楼 aiku930209 的回复:
想了下  
先将要更新的数据插入到A表中 然后将要替换的数据先查询出来然后获取到一些不需要更新的数据 去修改那个新插入的数据再把原始数据删除? 这样的话  怎么样呢?

还不如先删除后插入呢

#6


引用 5 楼 sinat_28984567 的回复:
Quote: 引用 3 楼 aiku930209 的回复:

想了下  
先将要更新的数据插入到A表中 然后将要替换的数据先查询出来然后获取到一些不需要更新的数据 去修改那个新插入的数据再把原始数据删除? 这样的话  怎么样呢?

还不如先删除后插入呢


但我要保留A表原始数据的像主键之类的字段的数据

#7


引用 6 楼 aiku930209 的回复:
Quote: 引用 5 楼 sinat_28984567 的回复:

Quote: 引用 3 楼 aiku930209 的回复:

想了下  
先将要更新的数据插入到A表中 然后将要替换的数据先查询出来然后获取到一些不需要更新的数据 去修改那个新插入的数据再把原始数据删除? 这样的话  怎么样呢?

还不如先删除后插入呢


但我要保留A表原始数据的像主键之类的字段的数据

要不就动态拼接sql语句,把所有字段都读取拼接到一个update语句中

#8


要用主键去关联更新

#9


引用 8 楼 xiaoxiangqing 的回复:
要用主键去关联更新

两张表不存在主外键  A表是一些人物信息表  B就是一些提前准备好大量的人物信息  然后可以从B表中随机获取一条然后将这个人物的信息填充到A表的某个人物中

#10


又不是次次都要重新写,你只写1次在程序里面,这里赖做什么。。。

#11


引用 楼主 aiku930209 的回复:
我有这么个需求 需要将B表的一条数据更新到A表 这两张表字段一样而且字段数量很多  有没有什么比较简单的sql语句可以做到?
如果直接写update的话set的字段要写太多了  有没有像添加那样的可以直接根据一条数据更新?


试试这个方法
要实现两个表之间的数据的自动更新,可以采用触发器来实现,触发器的实现方法:
1、A表有数据更新的时候自动更新B表:
create or replace trigger tg after update on A for each row  ---如果不需要每条数据都跟新,只需要在每次A更新的时候更新B,可以将后面的for each row去掉。
begin
update B set xx=xx where b.aid = a.id;
end;
/
2、A表插入数据时,B表更新数据:
create or replace trigger tgg after insert on A for each row
begin
insert B values(xxxx);
end;
/

#12


update A
set A.name = B.name ……………………
from B where B.sn = A.sn

字段都写好,很费时间?,你也1024个字段呀