如何在UK_bank_customers表中新增Full_Name列拼接Name与Surname字段
基于INSERT INTO SELECT实现Full_Name字段生成的可行方案
首先明确:INSERT INTO SELECT 本质是将查询结果写入表,如果你需要给存量数据批量生成拼接的Full_Name,最符合要求的实现是通过表迁移的方式完成;如果是针对新插入数据自动生成该字段,也可以结合新增字段操作实现。
方案1:存量数据全量迁移实现(适用于给所有已有记录填充Full_Name的场景)
- 第一步:创建结构和原表一致、额外新增
Full_Name字段的新表
-- 以MySQL为例,其他数据库仅需调整字段语法适配即可 CREATE TABLE UK_bank_customers_new ( `customer ID` INT, `Name` VARCHAR(50), `Surname` VARCHAR(50), `Age` INT, `Full_Name` VARCHAR(100) );
- 第二步:用
INSERT INTO SELECT将原表数据拼接后写入新表,不同数据库的字符串拼接语法有差异:- MySQL/MariaDB 写法
INSERT INTO UK_bank_customers_new (`customer ID`, `Name`, `Surname`, `Age`, `Full_Name`) SELECT `customer ID`, `Name`, `Surname`, `Age`, CONCAT(Name, ' ', Surname) FROM UK_bank_customers;- SQL Server 写法
INSERT INTO UK_bank_customers_new ([customer ID], [Name], [Surname], [Age], [Full_Name]) SELECT [customer ID], [Name], [Surname], [Age], [Name] + ' ' + [Surname] FROM UK_bank_customers;- PostgreSQL 写法
INSERT INTO UK_bank_customers_new ("customer ID", "Name", "Surname", "Age", "Full_Name") SELECT "customer ID", "Name", "Surname", "Age", "Name" || ' ' || "Surname" FROM UK_bank_customers; - 第三步:验证新表数据无误后,删除原表,将新表重命名为
UK_bank_customers即可完成需求。
方案2:原表新增字段后配合INSERT INTO SELECT使用(适用于新插入数据自动生成Full_Name的场景)
- 第一步:先给原表新增
Full_Name字段
ALTER TABLE UK_bank_customers ADD COLUMN Full_Name VARCHAR(100);
- 第二步:后续插入新数据时直接用
INSERT INTO SELECT拼接生成字段值,比如从临时表批量导入新用户时的写法:
-- 示例:从temp_new_users临时表导入新用户数据,自动生成Full_Name INSERT INTO UK_bank_customers (`customer ID`, `Name`, `Surname`, `Age`, `Full_Name`) SELECT `customer ID`, `Name`, `Surname`, `Age`, CONCAT(Name, ' ', Surname) FROM temp_new_users;
提示:如果仅需要给原表现有存量数据填充
Full_Name,更高效的方式是直接用UPDATE语句,但该方式不符合你要求的INSERT INTO SELECT使用限制。
内容的提问来源于stack exchange,提问作者Rohan Srivastwa
相关产品推荐
相关产品推荐

