如何用另一列的多条数据更新列?将test2.x值同步至test1.t2
解决方案:将test2的x列值批量导入test1的t2列
根据你的表结构描述,test1目前仅有1行数据(t1=1,t2=null),test2则包含20行x值从1到20的记录。要把test2的所有x值复制到test1的t2列,核心是让test1最终拥有对应test2每行数据的记录,每行t1保持为1、t2匹配test2的x值。下面分两种常见场景给出实现方法:
场景1:保留test1原有数据,新增20行对应test2的x值
如果不需要删除test1原来的那行数据,直接用INSERT ... SELECT语句批量插入即可:
INSERT INTO test1 (t1, t2) SELECT 1, x FROM test2;
这条语句会将test2中的每一行x值,搭配固定的t1=1,插入到test1表中。执行后test1会有21行数据:原来的1行(t2=null)加上新增的20行(t2为1-20)。
场景2:替换test1原有数据,只保留对应test2的20行数据
如果希望test1最终仅保留20行(t1=1,t2为1-20),可以先清空test1再插入:
-- 清空test1(TRUNCATE比DELETE更高效,适合全表清空场景) TRUNCATE TABLE test1; -- 批量插入test2的数据 INSERT INTO test1 (t1, t2) SELECT 1, x FROM test2;
如果不想使用TRUNCATE(比如需要保留表的自增序列等配置),也可以用DELETE FROM test1;替代第一行语句。
补充说明:若需将test2的x值拼接为单个值存入test1(不推荐)
如果你的特殊需求是把所有x值合并成一个字符串(例如"1,2,3,...,20")存入test1原有行的t2列,不同数据库的实现语法略有差异:
- MySQL/MariaDB:
UPDATE test1 SET t2 = (SELECT GROUP_CONCAT(x SEPARATOR ',') FROM test2);
- PostgreSQL:
UPDATE test1 SET t2 = (SELECT STRING_AGG(x::TEXT, ',') FROM test2);
不过这种方式不符合关系型数据库的范式设计,除非有明确业务需求,否则更推荐前面的行级插入方案。
内容的提问来源于stack exchange,提问作者Ranjan
相关产品推荐
相关产品推荐

