通过临时表,MySql快速联表关联数据

在实际项目常常使用联表更新的问题。
假设,有时候某个A表是空数据,需要重新创建数据,然后通过创建的数据与表B进行关联更新,且B中关联A中的字段ID。此时情况下,如何快速的将数据创建并对应。
本人实际工作中用到了这么个场景。

B中有若干条数据

总结的方案如下:

首先创建表A,并且在表A中循环插入N条数据。

- 自定义函数,插入31条数据
DELIMITER $$
create function a_Data()
returns int 
DETERMINISTIC
begin
	declare num int default 31;
	declare i int default 0;
	while i<num DO
		INSERT INTO A(id, isenable, notes, rate, ratedescription, taxitemid, version)VALUES(UUID(), '1', NULL, NULL, NULL, NULL, NULL);
		set i=i+1;
	end while;
	return i;
end $$
delimiter;
Select a_Data();

此时新数据N条已经创建好,下面是如何将创建的数据与B表进行关联,赋值。

通过临时表给A与B排序

Mysql创建临时表的命令如下:

create temporary table a_table select * from A;

给数据增加rownum排序

SET @rownum:=0;
select * from (SELECT @rownum:=@rownum + 1 as rownum,A.* FROM A) AwithRownum;

通过以上知识,我们给表A与表B增加排序,并且创建临时表。

SET @raterownum:=0;
SET @itemrownum:=0;
create temporary table A_table
select
	*
from
	(
	SELECT
		@raterownum := @raterownum + 1 as arownum,
		A.*
	FROM
		A) Arownum;

create temporary table B_table
SELECT
	@itemrownum := @itemrownum + 1 as brownum ,
	B.*
FROM
	B
where
	taxcategoryid = 'cf5d05df-cc33-7b98-578d-13008c20e288'
	and layer = 2
order by
	treeinfo_path;

创建A与B的数据映射关系:

create temporary table AmapB
select
	A.id as AID,
	B.id as BID
from
	B_table 
left join A_table on
	B_table.brownum= A_table.arownum;

最后通过update更新A中的数据

update
	A
JOIN B set
	bid = B_table.id
where
	A.bid = AmapB.BID;

最后把临时表删除

-- drop table A_table;
-- drop table B_table;
-- drop table AmapB;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值