sql语句实现一张表中插入另一张表数据

 如题,我的需求是插入表二中两个字段任意一个子弹的内容跟的表一的不一样的记录

博主写的sql:

insert into 表一 select * from 表二 where 表一的某个字段 not in(select 对应字段 from 表二);

 

我做了对应的修改

insert into 表一 select * from 表二 where (表二的字段1, 表二的字段2) not in(select (对应字段1, 对应字段2) from 表一);

 

转至 https://blog.youkuaiyun.com/baishatangk/article/details/78723532

SQL 中,将一张数据插入一张中,可以使用多种方法,具体取决于目标是否已经存在、是否需要指定字段、以及数据库类型等因素。 ### 使用 `INSERT INTO ... SELECT` 插入数据 如果目标已经存在,并且希望将来源数据插入到目标中,可以使用 `INSERT INTO ... SELECT` 语句。例如,将 `test` 中的所有数据插入到 `newTest` 中: ```sql INSERT INTO newTest SELECT * FROM test; ``` 如果只需要插入特定字段,可以显式指定字段名: ```sql INSERT INTO 目标(字段1, 字段2, ...) SELECT 字段1, 字段2, ... FROM 来源 WHERE 条件; ``` 这种方法适用于结构一致或部分字段匹配的情况 [^1]。 ### 使用 `SELECT INTO` 创建并插入数据 如果目标尚未存在,可以使用 `SELECT INTO` 语句,它会根据来源的结构和数据创建新插入数据: ```sql SELECT * INTO newTable FROM oldTable; ``` 此方法适用于快速创建结构并复制数据,但需要注意这种方式不会复制索引、约束等对象 [^4]。 ### 复制单列数据 如果需要将一张的某一列数据插入一张中,可以通过 `ALTER TABLE` 添加新列,然后使用 `UPDATE` 语句进行数据填充。例如,将 `course` 的 `cname` 列插入到 `student` 中: ```sql ALTER TABLE student ADD cname VARCHAR(50); UPDATE student SET student.cname = course.cname FROM course WHERE student.sno = course.cno; ``` 这种方式会修改结构,也可以通过创建视图来避免修改结构: ```sql CREATE VIEW v AS SELECT student.sno AS sno, student.sname AS sname, student.ssex AS ssex, course.cname AS name FROM student, course WHERE student.sno = course.cno; ``` 查询视图即可查看合并后的数据 [^2]。 ### 在 SQL Server 中插入排序后的数据 如果需要在插入数据时进行排序,可以在 `SELECT` 子句中使用 `ORDER BY`: ```sql INSERT INTO DestinationTable (ID, Name, Age) SELECT ID, Name, Age FROM SourceTable ORDER BY Age ASC; ``` `ORDER BY` 可以配合 `ASC`(升序)或 `DESC`(降序)使用 [^3]。 ### Oracle 中的插入方法 在 Oracle 中,可以使用 `INSERT INTO ... SELECT` 将数据一张插入一张中,前提是目标已经存在: ```sql INSERT INTO newtable SELECT * FROM oldtable; ``` 如果目标尚未存在,可以使用 `CREATE TABLE ... AS SELECT` 来创建并插入数据: ```sql CREATE TABLE newtable AS SELECT * FROM oldtable; ``` 如果结构不同,可以指定需要复制的字段: ```sql CREATE TABLE newtable AS SELECT s.c1, s.c2 FROM oldtable s; ``` 还可以在创建时重命名列名: ```sql CREATE TABLE newtable(id, name) AS SELECT s.c1, s.c2 FROM oldtable s; ``` 如果只需要复制结构而不复制数据,可以在 `WHERE` 子句中使用一个永远为假的条件: ```sql CREATE TABLE newtable AS SELECT * FROM oldtable WHERE 1 = 2; ``` 这些方法在 Oracle 和 MySQL 中略有差异,需要注意 [^4]。 ### SQL Server 中导入数据的示例 在 SQL Server 中,可以使用 `INSERT INTO` 指定目标字段并从来源中选择数据。例如,将 `distribution_table` 中的数据导入到 `pc_ruku` 中: ```sql INSERT INTO pc_ruku(名称, 数量, 业务类型, 业务归属, 事由, 科室, 时间, 厂家, 型号, 单价, 经办人, 办理人, 备注, 供货商) SELECT 名称, 数量, '配发' AS 业务类型, 类型 AS 业务归属, '' AS 事由, 配至科室 AS 科室, 配发时间 AS 时间, '' AS 厂家, '' AS 型号, '' AS 单价, '' AS 经办人, '' AS 办理人, 详情 AS 备注, '' AS 供货商 FROM distribution_table; ``` 这种方法允许将来源中的数据映射到目标的不同字段,并可以插入固定值或空值 [^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值