求MYSQL如何`批量`更新`多表`多字段`?
table1包含:ID,name,age,stat1,stat2,stat3,....stat100N个字段table2包含:ID,name,age,stat1,stat...
table1 包含:ID,name,age,stat1,stat2,stat3,....stat100 N个字段
table2 包含:ID,name,age,stat1,stat2,stat3,....stat50 少50个字段,包含的字段在T1里都有。
现在想要用T2的所有数据,去更新 T1的数据,如果用REPLAYCE INTO的话,原表没有被更新的50个字段的数据都会丢失。inner join ON DUPLICATE KEY UPDATE 语法也试过了,但总报错。
在网上搜了很久了,批量的都不好用,希望有高手指教,谢谢。 展开
table2 包含:ID,name,age,stat1,stat2,stat3,....stat50 少50个字段,包含的字段在T1里都有。
现在想要用T2的所有数据,去更新 T1的数据,如果用REPLAYCE INTO的话,原表没有被更新的50个字段的数据都会丢失。inner join ON DUPLICATE KEY UPDATE 语法也试过了,但总报错。
在网上搜了很久了,批量的都不好用,希望有高手指教,谢谢。 展开
2个回答
展开全部
思路:找到table2的所有字段,然后在table1中更新这些字段。
1:如果你要求在table1中插入table2的数据
SET @pstSql =CONCAT('INSERT INTO table1 (',
(SELECT GROUP_CONCAT(column_name) FROM information_schema.columns WHERE table_name='table2' AND table_schema='你的表所在的数据库名称'),
') SELECT ',(SELECT GROUP_CONCAT(column_name) FROM information_schema.columns WHERE table_name='table2' AND table_schema='你的表所在的数据库名称'),' From table2');
PREPARE stmt FROM @pstSql;
EXECUTE stmt;
2:如果你要求将table2的数据按照ID更新到table1中
SET @pstSql =CONCAT('update table1 a,table2 b set ',
(SELECT GROUP_CONCAT('a.',column_name,'=b.',column_name)
FROM information_schema.columns WHERE table_name='table2' AND column_name !='id' AND table_schema='你的表所在的数据库名称'),
' where a.id=b.id');
PREPARE stmt FROM @pstSql;
EXECUTE stmt;
1:如果你要求在table1中插入table2的数据
SET @pstSql =CONCAT('INSERT INTO table1 (',
(SELECT GROUP_CONCAT(column_name) FROM information_schema.columns WHERE table_name='table2' AND table_schema='你的表所在的数据库名称'),
') SELECT ',(SELECT GROUP_CONCAT(column_name) FROM information_schema.columns WHERE table_name='table2' AND table_schema='你的表所在的数据库名称'),' From table2');
PREPARE stmt FROM @pstSql;
EXECUTE stmt;
2:如果你要求将table2的数据按照ID更新到table1中
SET @pstSql =CONCAT('update table1 a,table2 b set ',
(SELECT GROUP_CONCAT('a.',column_name,'=b.',column_name)
FROM information_schema.columns WHERE table_name='table2' AND column_name !='id' AND table_schema='你的表所在的数据库名称'),
' where a.id=b.id');
PREPARE stmt FROM @pstSql;
EXECUTE stmt;
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询