2013-09-03 18 views
8

Tak więc dla każdej odrębnej wartości w kolumnie jednej tabeli chcę wstawić tę unikalną wartość do wiersza innej tabeli.Wstaw odrębne wartości z jednej tabeli do innej tabeli

list = select distinct(id) from table0 

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

Jakieś pomysły, jak się z tym pogodzić?

Odpowiedz

19

Ilekroć myślisz o zrobieniu czegoś w pętli, cofnij się i pomyśl jeszcze raz. SQL jest zoptymalizowany do pracy z zestawami. Można to zrobić za pomocą kwerendy ustaloną na bazie bez konieczności pętli:

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

Istnieją pewne przypadki brzegowe gdzie pętli może więcej sensu, ale jak SQL Server dojrzewa i bardziej funkcjonalność dodano te przypadki brzegowe dostać węższa i węższa ...

+0

Czy można utworzyć tabelę "automatycznie aktualizowaną" tylko w celu zapisania tych odrębnych wartości. Oznacza to, że jeśli zostaną usunięte lub zaktualizowane w tabeli 0, zostaną również zaktualizowane w tabeli 1. –

+0

@Gabriel Pewnie utwórz widok indeksowany. –

+0

dziękuję, będę szukać tego tematu, tworząc widoki indeksowane unikatowych wartości. Gdyby były to unikalne daty wielu "miesięcy", to nadal byłoby to takie samo prawo? Mówię o rejestrze czujników, który zapisuje liczby co sekundę. Chciałabym wiedzieć, które daty mogę wyszukać w środku. –

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

Inny prosty sposób kopiować różne dane z wielu kolumn z jednej tabeli do drugiej

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

Poniższe oświadczenie pracuje ze mną.

insert into table1(col1, col2) select distinct on (col1) col1 col2 from table0 
Powiązane problemy