纯数据库问题

sql server数据库,有两张表A,B,数据结构相同,都是有两列,ID和姓名,如下

image.png

我想根据B表的内容更新A表,使A,B两表的数据包含顺序完全一样,这两张表都大概有1万多行的数据。ID+姓名确定唯一一条数据,这个更新语句怎么写,越简便越好

SQL 帆软用户p9k8MX4NIW 发布于 2023-11-3 16:10
1min目标场景问卷 立即参与
回答问题
悬赏:0 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
Z4u3z1Lv6专家互助
发布于2023-11-3 16:12(编辑于 2023-11-3 16:37)

直接删除A表根据B表重建

image.png

--------------

IF OBJECT_ID('TEMPDB..#TEMP_表A') IS NOT NULL

DROP TABLE  #TEMP_表A

/*创建临时表 为了生成一个顺序*/

CREATE TABLE #TEMP_表A(

[I][NVARCHAR](100) NULL,

[id] [NVARCHAR](100) NULL,

[name] [NVARCHAR](100) NULL

)

/*A表插入临时表*/

insert into  #TEMP_表A select row_number() over(partition by id) [i],id,姓名 FROM A表;

with B as (

select row_number() over(partition by id) [i],id,姓名 FROM b表

)

/*通过顺序号I和 字段ID 更新临时表*/

update a set a.name=b.姓名 from #TEMP_表A a inner join b on a.i=b.i and a.id=b.id

/*删除表A数据*/

DELETE FROM A表

/*临时表数据写入A表*/

INSERT INTO A表 SELECT ID,姓名 FROM #TEMP_表A

/*删除临时表*/

DROP TABLE  #TEMP_表A

/*

PS:如果A表中同一ID有5个,B表只有3个则A表有2个不会更新

*/

  • 帆软用户p9k8MX4NIW 帆软用户p9k8MX4NIW(提问者) 这个是不能的,两张表的分别还有其它很多字段,并且表本身不能删除,只需要把两张表其中的两个字段更新成一样就好,只不过两张表的唯一标识得由ID+姓名确定
    2023-11-03 16:15 
  • Z4u3z1 Z4u3z1 回复 帆软用户p9k8MX4NIW(提问者) 你都要顺序一样了~~
    2023-11-03 16:16 
  • Z4u3z1 Z4u3z1 回复 帆软用户p9k8MX4NIW(提问者) 我好像理解到你的意思了稍等一下
    2023-11-03 16:18 
  • Z4u3z1 Z4u3z1 回复 帆软用户p9k8MX4NIW(提问者) 补充在上面了
    2023-11-03 16:37 
最佳回答
0
用户CKn4B8768Lv2见习互助
发布于2023-11-5 23:16

两个表分别加一个辅助字段,为自增值 ,使用update 更新。

alter table a add id_auto  INT AUTO_INCREMENT 

alter table b add id_auto  INT AUTO_INCREMENT 

update a set a.id =b.id ,a.姓名=b.姓名 from a left join b on a.id_auto = b.id_auto 

alter table a drop  column id_auto

alter table b drop  column id_auto

  • 2关注人数
  • 195浏览人数
  • 最后回答于:2023-11-5 23:16
    请选择关闭问题的原因
    确定 取消
    返回顶部