sqlserver A表插入B表后如何返回A表原有ID和插入B表后新增ID的对应关系

表:A

id(自增), name

1 ‘a’

2 ‘b’

表 B
id(自增), name

3 'c'
4, 'd'

执行
insert into B(name) select name from A

表 B

id(自增), name

3 'c'
4 'd'
5 'a'
6 'b'

现在的问题是如何返回 A表插入B表后新增的ID及原A表的ID对应关系

newID oldID

5 1
6 2

sql
0

5个回答

这个不大多都是框架来做么?你数据层用的什么呀?

0
child_1986
child_1986 是希望能用sql语句来做
大约 4 年之前 回复

你最好不要变动key,如果是自增,除非你有另一个字段作为匹配,否则基本对不上,所以最好自己维护一个key

0
child_1986
child_1986 不动key,只是希望得到新的ID和老的ID之间的对应关系,因为还要处理ID关联的其他表
大约 4 年之前 回复

根据A表的name值,做一个连接查询,查询A表和B表中name值相同的数据,将NewID,OldID查询出来并返回

0
child_1986
child_1986 回复于亮: 这样只能循环逐行插入了吧,不想用循环,希望能直接insert into B select from A这样简洁一些
大约 4 年之前 回复
jiuqiyuliang
于亮 回复child_1986: 建立一个第三张表,插入数据时也想第三张表插入一条,有一个自增主键,其他字段用A,B表主键等
大约 4 年之前 回复
child_1986
child_1986 回复于亮: 可以有临时表,但是我没想明白逻辑怎么弄,关联的时候只能用ID啊
大约 4 年之前 回复
child_1986
child_1986 回复于亮: 可以有临时表,但是我没想明白逻辑怎么弄,关联的时候只能用ID啊
大约 4 年之前 回复
jiuqiyuliang
于亮 回复child_1986: 能不能通过第三表来联系表A和B
大约 4 年之前 回复
child_1986
child_1986 回复于亮: 不行哦,B表太大,加字段认为开销太大
大约 4 年之前 回复
jiuqiyuliang
于亮 回复child_1986: 那看看能不能在B表增加字段白
大约 4 年之前 回复
child_1986
child_1986 只有ID是标识哦,name可能会出现重复的
大约 4 年之前 回复
jiuqiyuliang
于亮 当然name需要唯一,不要然这样不行
大约 4 年之前 回复
  • 使用游标逐行插入。
  • 每插入一行,将原id和新id的对照记录到一个临时表中
  • 全部插入完以后,显示临时表
0
child_1986
child_1986 回复知常曰明: 谢谢,我再想想其他的方法
大约 4 年之前 回复
gamefinity
知常曰明 回复child_1986: 你要老的id,本来就不是一个标准的做法,当然采取的策略也不能用标准的策略啦。标准的做法就是把老的id放到另一个字段,如@于亮所说
大约 4 年之前 回复
child_1986
child_1986 回复知常曰明: 批量插入时用output这个想法呢,但只能输出新的ID,找不到老的ID
大约 4 年之前 回复
gamefinity
知常曰明 回复child_1986: 效率应该没有你想象的那么慢。因为两表的关联是保存到一个临时表里的,既没有索引,又没有历史数据。从B表读出是一样的,写到A表,用统一的一个事务的话也相差有限。千万别每个insert一个事务
大约 4 年之前 回复
child_1986
child_1986 表量很大,这样执行效率有些慢,有别的解决方案吗
大约 4 年之前 回复

你有另一个字段作为匹配,否则基本对不上,所以最好自己维护一个key

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
向表A插入一条数据,获取插入当前数据的ID,然后把这条ID插入表B
insert into  B 表 (ID ) values ( @@IDENTITY)
SQL把A表的某列插入到B表的某列 根据关联ID
update 表B set base_price=a.base_price from 表A a inner join 表B b on a.id=b.goods_id
mysql生成一条A表数据的同时得到这条数据的自增ID
INSERT INTO pf_mission (title,createTime,status) values (#{title},now(),1) 注:此法传入的参数只能是一个对象,在数据库生成自增Id后马上将此Id赋值给参数对象,即给该对象setId(自增的id) 因之前想在生成一条A表数据的同时立刻给B表生成一条数据,并且将A数据的自增Id赋值给B表的一个字段,整个想法错误,
[Mysql举例]-- mysql向A表插入B表新增数据(即找出2表不同的数据)
一、创建测试表结构 t_basicinfo表结构一: CREATE TABLE `t_basicinfo` ( `id` varchar(36) NOT NULL COMMENT '唯一ID', `name` varchar(45) DEFAULT NULL COMMENT '名称', `type` varchar(30) DEFAULT NULL COMMENT '类型', ...
SQL-从B表往A表插入数据,如果A表有相同数据不重复插入。(增加更新数据的方法)
INSERT INTO rel_tag_bed (tagId, bedNo, wardNo, userName, sex, age) SELECT tagId, bedNo, wardNo, userName, s...
向B表插入A表有而B表无的数据;更新A表数据到B表
  两个excel表 ,18日数据表和19日数据表. 并有两个要求:  1. 18日表中的记录,如果在19日表中不存在,则将18日表中的此记录插入19日表2. 18日表中标注了充值人的记录,用来替换19日表中的相同记录 分别把两个excel中的数据通过navicat中的"导入向导"导入到mysql中我新建的两张临时表temp3和temp4. 18日数据对应temp3; 19日数据对应...
sql server 将A数据库中a表的数据插入B数据库中的b表
DECLARE @SortCode varchar(20); DECLARE @NewsTitle VARCHAR(100); DECLARE @ClassID VARCHAR(40); DECLARE @Content varchar(8000); DECLARE @Click INT; DECLARE @CreatTime VARCHAR(20); DECLARE @UpdateT
业务需求:一张数据表中有自增字段,插入一条数据以后返回自增的ID值
数据表结构:数据表 t_test                            结构【  id   int    primary  key(自增)】                               【name   varchar(25)    not    null】 实现方法目前想到两种:       1.   INSERT INTO  T_TEST  (NAME)
oracle,把A表在B表没有的字段数据插入到B中
INSERT INTO EVENTMASK VALUE ( SELECT EVENTID AS EVENTID ,#{EMPLOYEEID,jdbcType=VARCHAR}AS EMPLOYEEID , #{UUID,jdbcType=VARCHAR} AS EVENTMASKUUID ( select EVEN
【Oracle】两个表a、b,向a表中插入一条数据,但是 a表中的有一个字段是b表的主键
遇到问题:两个表啊a和b,我要向a表中插入一条数据,但是a表中的有一个字段是b表的主键 解决方法: 1.创建2个表: create table t1(a varchar2(30),b varchar2(30) ); create table t2(c varchar2(30),b varchar2(30) ); 2.向新建的t1表中增加数据 select * from t1 fo...
【Oracle】将A表中有的数据,但是B表中没有的数据,插入到B表中;
1.先查询A表中有,但是B表中没有的数据; select * form A a where NO EXISTS( select a.id from A a where a.id = b.id; ); 2.将A有B没有的数据,插入到B表中;这里用的不是常规的values,而是insert into table_name +查询的记录;这种模式;如果不是全插入,可以将子查询的全查询改为部分查询...
数据库 a表左连接b表,a中一条数据对应b中多条数据,如何只取b表中createDate最大的一条
CREATE TABLE a  (id INT) CREATE TABLE B (cid INT ,createDate DATETIME)   INSERT INTO a  SELECT 1  UNION SELECT 2        INSERT INTO b SELECT 1,'2016-02-19' UNI
Mysql中用表a中数据更新另一表b中数据的同时a的数据被修改
测试使用的隔离级别为Read Repeatable 建表和插入数据的SQL语句 create table test1(id int auto_increment primary key, no int, key(no)); create table test2(id int auto_increment primary key, no int, key(no)); insert
查询A表B表同时存在记录, A表存在而B表不存在记录, B表存在而A表不存在记录
1. 问题 查询A表B表同时存在记录, A表存在而B表不存在记录, B表存在而A表不存在记录 如上图, 其中:A区域是old表有, new表没有的集合; C区域是new表有, old表没有的集合; B区域是old表与new表共有的集合。Q:已知old表与new表的表结构相同, 求A, B, C集合。2. 场景模拟解决下面有两张表分别为old表与new表, 表结构完全相同, 如下:/*Tabl
Oracle中如何把A表一列的数据插入到B表的一列中
插入时,问题是B表的数据为空,并没有对应的主键ID,所以应该用序列来生成(创建表的时候必须添加一个序列) 表A 列aa 序列SEQ_A 表B 列bb 序列SEQ_B,两个表的主键都叫id INSERT INTO A(id,aa) (SELECT SEQ_A.nextval,B.aa FROM B) 不然会报错,id为NULL,插入失败
MySql触发器:A表更新B表新增
创建触发器 CREATE TRIGGER T_TRIGGER_UPDATE BEFORE|AFTER UPDATE|INSERT|DELETE ON 表A FOR EACH ROW BEGIN insert into 表B(列1, 列2, ...) VALUES(NEW.列1, NEW.列2, ...); END 解释:T_TRIGGER_UPDATE为触发器名字;BEFORE|AFT...
SQL将A表的现有数据添加到B表
将A表的产品名称添加到B表中的产品名称字段中 update 库单商品表 set 产品名称 = (select 产品名称 from 产品表 where 库单商品表.产品序号=产品表.产品序号) 2.子查询方式 UPDATE 表2 SET 表2.C = (SELECT B FROM 表1 WHERE 表1.A = 表2.A) WHERE ...
mysql将a表字段插入到b表
insert into userevent(cellphone) select cellphone from customer
SQL数据库B库表数据导入到A库表
------------ A库表数据导入到B库表(同类结构库) use  A库 go  set identity_insert 表名   ON  go insert into 数据库表名 (  字段1  , 字段2 , ...... , .....  , ........,  字段N  ) select  字段1  , 字段2 , ...... , ....
PHP基于Laravel中取B表中数据(集合)来更新A表数据(集合)
在实际项目中,我们会遇到同时更新数据库中某个表(下称表A)中的多条数据,而更新得内容则需要取自于另外一张表(下称表B),表A和表B都是从数据库中get方式取得的数据,在这种情况下我们可以这么做: // 根据商家Id查找出所有的商品信息    $goodsInfo = Goods::whereIn('shop_id', explode(',', $sidStr))->get();    ...
表A与表B是一对多关系,取表B中任一记录与A关联查询
通过Group By + min方法取得表B中分组后的多条记录中某个字段(一般使用主键或者不重复的列)值最小的记录,然后表A和表B做外连接 [code="sql"] select a.id, a.name from a left join (select id, name from b inner join (sel...
oracale 触发器 实现 插入一跳数据时同时在另一个表插入数据,数据库触发器实现id自增
oracale触发器 1.在packing_list表执行insert插入操作后,同时将数据插入到packing表中   create or replace trigger packing_trg //触发器名称 packing_trg after insert on packing_list //packing_list 表名称 在packing_list 表执行...
服务器A (数据库表数据)导入数据至服务器B(数据库表数据)
--服务器A (数据库表数据)导入数据至服务器B(数据库表数据) use 服务器B(DB) go insert into dbo.table --打开服务器数据库AC exec sp_configure 'show advanced options',1 reconfigure exec sp_configure 'Ad Hoc Distributed Queries',1 rec
mysql用存储过程写入 一个表A中没有存在在另一个表B的数据
需求 Abiao id content 1 sfsdfsg 2 ddsgffd 3 gfggg 4 dggfhfd Bbiao id 2 3 那么我要查询到Abiao 里面在Bbiao没有的数据 (理想结果)就是: id content 1 sfsdfsg 4 dggfhfd
将A 表数据插入B表而B表不存在 Oracle 写法
--请将部门人数大于5人的部门名称和人数插入一张新表 --将A 表数据插入B表而B表不存在 ,sql server 写法 --select * into B from A --将A 表数据插入B表而B表不存在 Oracle 写法 --create table B as select * from A; create table Total(dname,menberTotal) as select
查询A表数据插入到B表中
---插入语句 INSERT INTO DT_CK_CZRY_MX             select t.czy_dm ,t.czy_mc ,'','','','','','','','','','','','','2370193000005','行政服务大厅',''   from DT_CK_CZRY t  where t.dt_dm = '2370193000005'    an
更新 将B表的数据更新到A表中的某个字段的sql(根据条件)
update  A set FResponPositionID=(select FResponPositionID from B where A.funitid=B.fid   and B.fisleaf=1 and B.FIsOUSealUp=0 and   B.FResponPositionID 实际过程中: 将T_ORG_OUPartAdmin表中的FResponPositi
利用子查询找出某个属性存在A表而不存在B表的数据
概述假设有两张表,A表和B表A表: id name age 1 xxx 15 2 yyy 18 3 zzz 20 B表: id b_id age 1 1 15 2 2 18 其中B表的b_id字段引用了A表的id字段。现在有个查询需求: 给出已知的A表中的id,比如:id in (1,2,3),找出这些id在B表中没有
sql 中如何将A表的数据更新到B表中,数据表备份语句
表A  sheet1$,表B  T_DICT,要利用表A的数据更新表B中关联的数据: UPDATE T_DICT SET BASYBM0= sheet1$.病案费用编码 FROM sheet1$ WHERE sheet1$.病案费用名称=t_dict.BASYMC0 AND KIND='项目' 将表t_dict备份为t_dictback select * into t_dic
SQL:A表(id,old_id,new_id),B表(id,name),并且old_id和new_id对应B表的id,那么如何查询出A表这两列对应B表的名字
SQL语句: SELECT                a.id,                b1.name oldName,                b2.name newName           FROM           A a           LEFT JOIN B b1 ON a.old_id = b1.id           LEFT JOIN  B b2 O...
oracle数据库-A表的数据导入到B表
1.两张表数据结构一致 insert into tableB select * from tableA (这里可以输入过滤条件) 2.指定字段 insert into tableB (col1, col2, ...) SELECT col1, col2, ... FROM tableA; 3.插入B中不存在的差异数据 insert into tableB (id,name...
Mysql数据库将同一表中的A字段数据复制到B字段
将同一数据库同一表中的A字段上的信息复制保存到B字段上,但是如果B字段有数据就不复制,只复制内容为空的行。UPDATE 表名 SET 字段B = 字段A WHERE 字段B IS NULL;
从a表插入b表没有的数据
INSERT INTO PER_BSE_INF (LGLPSN_ENT_CD,CUST_NO) SELECT NEW_BANK_ID,NEW_CUST_NO FROM OLD_NEW_CSTNO WHERE not exists (select * from PER_BSE_INF where PER_BSE_INF.CUST_NO = OLD_NEW_CSTNO.NEW_CUST_NO);
sql复杂查询:A表与B表一对多,查询A表所有用户对应B表中的数据,去除B表中的日期最大值
直接上sql:SELECT l.*FROM Users u, Location l WHERE u.id = l.Userid AND l.[time] = ( SELECT MAX ([Time]) FROM Location WHERE UserId = l.Useri
五奥环Java面试题
SQL部分 1. 表a和表b结构相同,indexid为主键,在表b中插入表a有,但是表b中没有的数据
Oracle数据库分批次向A表中插入B表中数据
业务简介:A表是B表的明细表,现需求是B表有上百万记录,在A表中插入B表的相关记录。 准备工作:oracle数据库,数据库工具pl\sql,存储过程写在包中。 实现思路: 3.1 获取B表总数据量V_CU_COUNT,设置一次提交量V_SIZE为5000,计算出总页数V_PAGE := CEIL(V_CU_COUNT / V_SIZE);,起始索引V_INDEX为1; 3.2 每5000条数...
对多表进行添加数据(获取最后一条插入的数据的ID)
有时我们会需要对多张表进行关联,今天我需要用到多表添加。不知道怎么弄但是想了下可以获取到第一张表最后一次进行添加的数据,我只会两种方法:一是获取到最后一次进行添加的时间,二是获取到最后进行添加的ID。我用的是第二种获取到最后进行操作添加的ID。 先将一张表进行添加数据的操作,写上查询语句“select LAST_INSERT_ID()”获取到最后一次添加的ID。获取到ID后返回一个int型的值,
mysql 将A表中的数据更新到B表中
UPDATE table_B t1 INNER JOIN (     SELECT         *     FROM         table_A tt     WHERE         tt.order_info_id IN (             SELECT DISTINCT                 order_info_id             FROM      ...
mysql中把表A某列数据更新到表B,批量更新
update 表B,表A set 表B.opTime = 表A.opTime where 表B.id = 表A; 大概思路是需要有要更新的表B和数据-表A,表A可以是一个结果集或者临时表. 之后使用set关联需要更新的列,最后是判断条件. 关键在于表A,或者说要更新的数据,根据业务需求先要得出这个数据集合,之后就好办了. ...
mongodb如何查询A集合内容后对B集合进行修改
背景:公司有collection A:plete 部分document缺失时间数据,而时间数据在collection B: metadata 需求:找出collection:plete中缺失时间的记录,通过matchid在collection:metadata中找出时间数据 写入collection:plete中 代码: db.getCollection("plete") .find({"...