将一个表中的不同值插入另一个表中

Dre*_*rew 13 sql sql-server

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

list = select distinct(id) from table0

for distinct_id in list
 insert into table1 (id) values (distinct_id)
end
Run Code Online (Sandbox Code Playgroud)

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

Aar*_*and 29

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

INSERT dbo.table1(id) SELECT DISTINCT id FROM dbo.table0;
Run Code Online (Sandbox Code Playgroud)

有一些边缘情况,循环可以更有意义,但随着SQL Server的成熟和更多功能的添加,这些边缘情况变得越来越窄......

  • @Gabriel假设您的意思是即使专栏也有时间也要按天计数?`使用schemabinding作为选择创建视图dbo.vname d = CONVERT(date,col),c = COUNT_BIG(*)from dbo.tname GROUP BY CONVERT(date,col);`然后`在dbo.vname上创建唯一聚集索引cix_vname (d);` (2认同)

Rom*_*kar 6

insert into table1 (id)
select distinct id from table0
Run Code Online (Sandbox Code Playgroud)


小智 6

以下声明适用于我。

insert into table1(col1, col2) select distinct on (col1) col1 col2 from table0 
Run Code Online (Sandbox Code Playgroud)


小智 5

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

INSERT INTO Table2(Id) SELECT DISTINCT Id FROM Table1 WHERE Id NOT IN(SELECT Id FROM Table2);
Run Code Online (Sandbox Code Playgroud)