2013-09-03 32 views
8

Vì vậy, đối với mỗi giá trị riêng biệt trong một cột của một bảng, tôi muốn chèn giá trị duy nhất đó vào một hàng của một bảng khác.Chèn các giá trị khác biệt từ một bảng vào bảng khác

list = select distinct(id) from table0 

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

Bất kỳ ý tưởng nào về cách thực hiện việc này?

Trả lời

19

Bất cứ khi nào bạn nghĩ về làm điều gì đó trong vòng lặp, hãy lùi lại và suy nghĩ lại. SQL được tối ưu hóa để làm việc với các bộ. Bạn có thể làm điều này bằng cách sử dụng truy vấn tập hợp dựa trên mà không cần phải lặp:

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

Có một số trường hợp cạnh nơi vòng lặp có thể có ý nghĩa hơn, nhưng như SQL Server trưởng thành và nhiều chức năng hơn được thêm vào, những trường hợp cạnh được hẹp hơn và hẹp hơn ...

+0

Có thể tạo bảng "được tự động cập nhật" chỉ để lưu trữ các giá trị riêng biệt này không. Ví dụ: nếu chúng bị xóa hoặc cập nhật tại bảng 0, chúng cũng sẽ được cập nhật tại bảng 1. –

+0

@Gabriel Chắc chắn, tạo chế độ xem được lập chỉ mục. –

+0

cảm ơn bạn, tôi sẽ tìm kiếm chủ đề này, tạo chế độ xem được lập chỉ mục các giá trị duy nhất. Nếu họ là những ngày duy nhất của nhiều tháng "", nó sẽ vẫn là cùng một quyền? Tôi đang nói về một đăng ký cảm biến lưu trữ số mỗi giây. Và tôi muốn biết những ngày nào tôi có sẵn để tìm kiếm bên trong. –

5
insert into table1 (id) 
select distinct id from table0 
0

cách đơn giản khác để sao chép dữ liệu riêng biệt với nhiều cột từ một bảng để

khác
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 
1

tuyên bố sau đây làm việc với tôi.

insert into table1(col1, col2) select distinct on (col1) col1 col2 from table0