SQL INSERT INTO TABLE SELECT指定插入字段的新用法

本文介绍了一种在Oracle数据库中将一张配置表的部分字段迁移到另一张表的方法,并通过具体示例展示了如何进行字段的选择与插入。同时,强调了在实际生产环境中使用该方法时可能遇到的风险。

首先声明开发用的数据库是Oracle ,其他数据库未做测试

今天开发中遇到个需求,就是把一张配置表TABLE1的某些字段查询出来插入到另一张表TABLE2中去,但是由于TABLE2中需要插入的字段实在是太多了,但我能从TABLE1中查询出来的字段很有限,其余的字段怎么办呢? 不插入就会报插入的值不够的SQL ERROR

但是以前也只写过INSERT INTO TABLE2(字段1,字段2) values(值1,值2)的写法

对于INSERT INTO TABLE2 SELECT * FROM TABLE1的写法,当两张表不统一,且字段名不对应的情况,该怎么办呢?

于是就尝试了一下:INSERT INTO TABLE2(字段1,字段2) SELECT * FROM TABLE1的写法。事实证明这样的写法是可以通过的。

例子:

INSERT INTO TABLE2(UUID,UNITID, TARGET_TYPE)   
SELECT '74fdac29-118a-492b-885b-58a3e12b70f4' AS UUID,conf.UNITID AS UNITID,'P' AS TARGET_TYPE FROM TABLE1 conf  WHERE DEVID='w999' AND UNITID='1';   
COMMIT;

 

 

此处只插入3个字段让SQL简短一些,方便理解。


但是特别声明:这个方法不能在上线的系统中正在使用的数据库中使用,因为最近听说了一个血的教训,有个哥们在有700万条数据的服务器中直接使用这个 SQL 迁移数据,导致数据库表被琐死,客户无法正常下单,故障一个多小时,给公司造成了特大的损失,然后那个哥们被开除了。

https://www.jianshu.com/p/88c58a09f95a

 

 

 

在使用 `INSERT INTO SELECT` 语句时指定赋值某个字段,可在 `INSERT INTO` 子句中列出目标表的字段,在 `SELECT` 子句中为这些字段提供对应的值。若要为某个字段指定特定值,可在 `SELECT` 子句中直接给出该值。 以下是几种不同场景下的示例: #### 为目标表的某个字段指定固定值 假设存在两个表:`source_table` 和 `target_table`,`target_table` 比 `source_table` 多一个 `status` 字段。现在要将 `source_table` 的数据插入到 `target_table` 中,同时为 `status` 字段指定固定值 `'active'`。 ```sql -- 创建源表 CREATE TABLE source_table ( id INT, name VARCHAR(50) ); -- 创建目标表 CREATE TABLE target_table ( id INT, name VARCHAR(50), status VARCHAR(20) ); -- 插入数据并指定赋值某个字段 INSERT INTO target_table (id, name, status) SELECT id, name, 'active' FROM source_table; ``` #### 结合源表字段和计算值为目标表字段赋值 若要根据源表的字段计算出一个值赋给目标表的某个字段,可在 `SELECT` 子句中使用表达式。例如,源表有 `price` 字段,目标表有 `discounted_price` 字段,要将源表 `price` 打 8 折后的值赋给目标表的 `discounted_price` 字段。 ```sql -- 创建源表 CREATE TABLE source_table ( id INT, price DECIMAL(10, 2) ); -- 创建目标表 CREATE TABLE target_table ( id INT, discounted_price DECIMAL(10, 2) ); -- 插入数据并指定赋值某个字段 INSERT INTO target_table (id, discounted_price) SELECT id, price * 0.8 FROM source_table; ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值