19

因此,对于一个表的列中的每个不同值,我想将该唯一值插入到另一个表的一行中。

list = select distinct(id) from table0

for distinct_id in list
 insert into table1 (id) values (distinct_id)
end

关于如何解决这个问题的任何想法?

4

5 回答 5

36

每当您考虑在循环中做某事时,请退后一步,再想一想。SQL 已针对集合进行了优化。您可以使用基于集合的查询来执行此操作,而无需循环:

INSERT dbo.table1(id) SELECT DISTINCT id FROM dbo.table0;

在某些极端情况下,循环可能更有意义,但随着 SQL Server 的成熟和添加更多功能,这些极端情况变得越来越窄......

于 2013-09-03T18:33:00.933 回答
8
insert into table1 (id)
select distinct id from table0
于 2013-09-03T18:32:37.777 回答
5

以下陈述适用于我。

insert into table1(col1, col2) select distinct on (col1) col1 col2 from table0 
于 2016-12-13T23:15:23.993 回答
4

下面的查询还将检查表 2 中的现有数据。

INSERT INTO Table2(Id) SELECT DISTINCT Id FROM Table1 WHERE Id NOT IN(SELECT Id FROM Table2);
于 2018-08-06T19:06:20.127 回答
0

其他将具有多列的不同数据从一个表复制到另一个表的简单方法

Insert into TBL2 
Select * from (Select COL1, ROW_NUMBER() over(PARTITION BY COL1 Order By COL1) AS COL2 From TBL1)T
where T.COL2 = 1
于 2013-09-03T19:55:18.280 回答