2 ymw19900221 ymw19900221 于 2015.05.28 14:43 提问

数据库中把一张表中的值传给另一张表中相同的字段

数据库中有两张表A,B,大部分字段相同,A表中没有数据,要把B表中的数据传给A表中相对应的字段

7个回答

gamefinity
gamefinity   Rxr 2015.05.28 15:30
已采纳

11两种情况
2.B表中的行在A表中都有,A表仅是缺少部分数据列

UPDATE A
   SET A.F1 = B.F1,A.F2=B.F2
    FROM B
WHERE A.Id = B.Id
   AND B.Filter=...

3.B表中的数据未必在A表中都用,A表不仅缺数据列,还缺数据行.要执行两句(MSSQL)

INSERT INTO A(Id,F1,F2) 
SELECT Id,F1,F2
  FROM B
WHERE NOT EXISTS (SELECT Id FROM B WHERE A.Id = B.Id)
   AND B.Filter= ...;

UPDATE A
   SET A.F1 = B.F1,A.F2=B.F2
    FROM B
WHERE A.Id = B.Id
   AND B.Filter=...;

有些数据库有INSERT OR REPLACE 可以把这两句合二为一

ymw19900221
ymw19900221 非常感谢
接近 3 年之前 回复
ymw19900221
ymw19900221 非常感谢
接近 3 年之前 回复
edouardzyc
edouardzyc   2015.05.28 14:49

insert into A (a1, a2)
as select (b1, b2) from B

edouardzyc
edouardzyc 回复ymw19900221: 那你是update 不是insert咯, 多列更新最好用存储过程
接近 3 年之前 回复
ymw19900221
ymw19900221 对不起,可能是我描述有点问题,A表中有数据,但数据不全,要用B表中数据补全
接近 3 年之前 回复
ymw19900221
ymw19900221 我的两张表大部分字段相同,也有不同的字段,不同的字段不要
接近 3 年之前 回复
edouardzyc
edouardzyc sorry 没有as
接近 3 年之前 回复
suijingzuo
suijingzuo   2015.05.30 19:01

有一个非常好用的办法,楼主可以先用exp备份,然后用Imp的导入

首先用SQL> exp system/system tables=用户名.b表 file=D:\ CSBN
我用system用户身份 我要备份有很多数据的B表 备份文件放在D盘的根下,文件名叫CSBN

在cmd 的dos界面 imp system/system fromuser=b表的拥有者 touser=a表的拥有者 tables=b表 file=D:\ CSBN

caozhy
caozhy   Ds   Rxr 2015.05.28 14:45

update table2 b set xxx = (select xxx from table1 where id = ???) where id = ???

ymw19900221
ymw19900221 如果我要更新的列比较多呢?有没有什么简便方法
接近 3 年之前 回复
meixuesc
meixuesc   2015.05.28 14:56

insert into.....select语句

meixuesc
meixuesc   2015.05.28 14:56

insert into.....select语句

tianlanse0225
tianlanse0225   2015.05.28 15:08

看实际吧是需要导入还是去更新,楼上的方法就行了,问题不是太明确哈。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!