因此,对于一个表的列中的每个不同值,我想将该唯一值插入另一个表的行中。
list = select distinct(id) from table0
for distinct_id in list
insert into table1 (id) values (distinct_id)
end
关于如何解决这个问题的任何想法?
答案 0 :(得分:24)
每当你考虑在循环中做某事时,退后一步,再想一想。 SQL已经过优化,可以使用集合。您可以使用基于集合的查询执行此操作,而无需循环:
INSERT dbo.table1(id) SELECT DISTINCT id FROM dbo.table0;
在某些边缘情况下,循环可能更有意义,但随着SQL Server的成熟和添加更多功能,这些边缘情况变得越来越窄......
答案 1 :(得分:6)
insert into table1 (id)
select distinct id from table0
答案 2 :(得分:2)
以下声明适用于我。
insert into table1(col1, col2) select distinct on (col1) col1 col2 from table0
答案 3 :(得分:1)
下面的查询还将检查表2中的现有数据。
INSERT INTO Table2(Id) SELECT DISTINCT Id FROM Table1 WHERE Id NOT IN(SELECT Id FROM Table2);
答案 4 :(得分: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