insert into select 批量插入不重复数据
时间: 2024-09-23 09:13:42 浏览: 25
`INSERT INTO SELECT` 是一种SQL语句,它允许从一个表(源表)中选择数据,并将这些数据插入到另一个表(目标表)中。这种技术常用于批量复制数据、填充空表,或者当需要保证新数据的唯一性时。
使用这个语句的一般步骤如下:
1. 确定源表(通常包含你需要的数据),以及目标表(接收数据的表)。
2. `SELECT` 子句指定要从源表中选取哪些列,以及如何组合它们(如果需要条件过滤,可以添加WHERE子句)。
3. `INTO` 关键字后跟目标表名,表示要将选择的结果插入到该表中。
4. 如果目标表有主键或唯一约束,`ON DUPLICATE KEY UPDATE` 或者 `IGNORE` 可以处理插入重复数据的情况。前者会更新已存在的记录,后者则忽略重复值。
例如:
```sql
INSERT INTO target_table (column1, column2)
SELECT column1, column2
FROM source_table
ON DUPLICATE KEY UPDATE column1 = VALUES(column1), column2 = VALUES(column2);
```
相关问题
sql批量插入1000条数据,两张表name是同一个,其中每个表有id变动唯一不重复
你可以使用以下SQL语句批量插入1000条数据,其中每个表的id变动唯一不重复,但name字段是相同的:
```
-- 批量插入1000条数据到table1
INSERT INTO table1 (id, name, column1, column2, ...)
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS id, 'name' AS name, 'value1' AS column1, 'value2' AS column2, ...
FROM master..spt_values AS a
CROSS JOIN master..spt_values AS b
CROSS JOIN master..spt_values AS c
ORDER BY id;
-- 批量插入1000条数据到table2
INSERT INTO table2 (id, name, column1, column2, ...)
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS id, 'name' AS name, 'value1' AS column1, 'value2' AS column2, ...
FROM master..spt_values AS a
CROSS JOIN master..spt_values AS b
CROSS JOIN master..spt_values AS c
ORDER BY id;
```
其中,table1和table2是你要插入数据的两张表,name是相同的字段名,column1、column2是table1和table2表中的其他字段,value1、value2是对应字段的值。
这里使用了ROW_NUMBER()函数来生成唯一的id值,每个表中的id值都是不重复的。使用了master..spt_values系统表来生成1000条数据,可以根据需要更改插入数据的数量。使用了SELECT NULL来代替ORDER BY子句中的列名,提高了插入数据的效率。
这样,你就可以批量插入1000条数据,并且保持name字段的一致性,并且每个表中的id值都是唯一的。
insert select 去重
可以使用NOT EXISTS来在INSERT SELECT语句中进行去重操作。通过在SELECT子句中使用NOT EXISTS子查询来判断要插入的数据是否已经存在于目标表中。具体操作如下:
INSERT INTO table1(field1, field2, field3)
SELECT field1, field2, field3
FROM table2 a
WHERE NOT EXISTS (
SELECT *
FROM table1 b
WHERE a.field1 = b.field1
)
这段代码中,我们将从table2表中选择field1、field2和field3字段的值,并将它们插入到table1表中。在WHERE子句中,我们使用NOT EXISTS子查询来判断在目标表table1中是否存在与当前正在插入的数据具有相同field1值的记录。如果不存在,则插入该记录。
这样可以确保插入到table1表中的数据不会与已存在的数据重复。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [MySql 批量插入,解决重复值问题](https://blog.csdn.net/qq_39360632/article/details/119816741)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *2* [insert select 过滤掉重复数据](https://blog.csdn.net/farxix/article/details/102949923)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *3* [Oracle 数据去重问题 Insert into select Distinct](https://blog.csdn.net/qq_32692315/article/details/87713144)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"]
[ .reference_list ]