2009-10-13 29 views
8

Tôi có hai bảng với cột khác nhau như thế này:Làm thế nào để sao chép dữ liệu giữa hai bảng trong SQLite?

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

table2 
(
    _id, 
    phone, 
    name, 
    address 
) 

Làm thế nào tôi có thể sao chép dữ liệu 'tên', 'địa chỉ' từ table1 để table2.

Và câu hỏi của tôi có hai tình huống:

  • Đầu tiên: table1, table2 trong file cơ sở dữ liệu cùng
  • Thứ hai: table1 trong data1.db tập tin, table2 trong data2.db tập tin

Trả lời

20

Sao chép trong SQL hoạt động như sau:

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

Nếu giá trị của cột.210 là như nhau, bạn cần phải chèn và cập nhật

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) 

Nếu bạn cần phải sao chép các cột giữa cơ sở dữ liệu, đầu tiên bạn xuất chúng vào một tập tin (sử dụng bất kỳ định dạng mà bạn thích, ví dụ như CSV) và sau đó hợp nhất mà tệp vào cơ sở dữ liệu thứ hai theo cách thủ công vì bạn không thể viết một câu lệnh SQL có nội dung "sử dụng các cấu trúc sqlite" này.

+0

Tại sao không chỉ chèn các id lần đầu tiên? – TheOne

+0

@Ramin: Mã của tôi chèn tất cả các id lần đầu tiên. Nếu bạn cố chèn các id từ 'table2' đã tồn tại, bạn sẽ gặp lỗi. Vì vậy, hai câu lệnh cập nhật sẽ sao chép các trường không phải id cho tất cả các id hiện có. –

Các vấn đề liên quan