2009-10-13 13 views
8

Mam dwie kolumny tabeli z innego takiego:Jak kopiować dane między dwiema tabelami w SQLite?

table1 
(
    _id, 
    title, 
    name, 
    number, 
    address 
) 

table2 
(
    _id, 
    phone, 
    name, 
    address 
) 

Jak mogę skopiować dane „Nazwa”, „adres” z Tabela1 do tabela2.

I moje pytanie ma dwa sytuację:

  • pierwsze: tabela1, tabela2 w tym samym pliku bazy
  • drugie: tabela1 w data1.db pliku Tabela 2 w data2.db pliku

Odpowiedz

20

Kopiowanie SQL działa tak:

insert into table2 (name, address) 
select name, address 
from table1 

Jeśli wartości kolumny id_ są takie same, trzeba wstawić i zaktualizować

insert into table2 (name, address) 
select name, address 
from table1 t1 
where not exists (select * from table2 t2 where t1._id = t2._id) 
; 
update table2 t2 name = (select name from table1 t2 where t1._id = t2._id) 
; 
update table2 t2 address = (select address from table1 t2 where t1._id = t2._id) 

Jeśli trzeba skopiować kolumny między bazami danych, należy najpierw wyeksportować je do pliku (użyć dowolnego formatu chcesz, na przykład CSV), a następnie scalić że plik do drugiej bazy danych ręcznie, ponieważ nie można napisać SQL, który mówi "użyj tych struktur sqlite".

+0

Dlaczego po prostu nie wstawiać identyfikatorów za pierwszym razem? – TheOne

+0

@Ramin: Mój kod wstawia wszystkie identyfikatory za pierwszym razem. Jeśli spróbujesz wstawić identyfikatory z 'table2', które już istnieją, dostaniesz błędy. Tak więc dwie instrukcje aktualizacji będą kopiować pola inne niż id dla wszystkich istniejących identyfikatorów. –

Powiązane problemy