2010-01-04 37 views
5

Tôi có hai bảng, ta và tb:Kết hợp hai bảng trong SQLite

ta:

key col1 
-------- 
k1 a 
k2 c 

tb:

key col2 
------- 
k2 cc 
k3 ee 

Họ nối với nhau bằng "chìa khóa". Tôi muốn biết làm cách nào để có được một bảng, tc, như:

key col1 col2 
------------- 
k1 a 
k2 c cc 
k3 ee 

Có phương pháp dễ dàng thay vì chèn từng bản ghi không? Họ là một triệu hồ sơ của các bảng vì vậy tôi cần một cách hiệu quả.

Trả lời

4

Tạo VIEW trong hai bảng. Viết tuyên bố SELECT ... JOIN cung cấp cho bạn kết quả mong muốn và sau đó sử dụng làm cơ sở cho VIEW.

Ví dụ:

CREATE VIEW 
    database.viewname 
AS 
    SELECT 
    ta.key, 
    ta.col1, 
    tb.col2 
    FROM 
    ta 
    LEFT JOIN 
    tb 
    USING(key) 
+2

Điều này sẽ bỏ lỡ mục nhập thứ 3 trong bảng mong muốn. Nó sẽ cần phải là một FULL OUTER JOIN –

+0

Jeff, bạn nói đúng. Tôi không đọc kỹ các ví dụ. Phương pháp này là như nhau tuy nhiên. –

+0

Có, tôi đồng ý. –

0

Đối với những gì bạn đang tìm kiếm bạn sẽ cần phải làm một OUTER FULL JOIN để đảm bảo bạn không bỏ lỡ bất kỳ phím. Khi bạn có truy vấn hoạt động, bạn có thể nghĩ đến việc chỉ sử dụng truy vấn hoặc tạo chế độ xem.

Bạn có thể cần phải làm việc xung quanh các giới hạn của DB nếu FULL OUTER JOIN không được triển khai, bạn có thể chỉ cần UNION kết hợp bên trái và bên phải để tạo toàn bộ.

+0

Việc tạo phần xem mà tôi không thể hiểu được. Tôi có thể làm một tham gia bên ngoài hoàn toàn bằng cách sử dụng hai LEFT JOIN và một UNION. Không có RIGHT OUTER JOIN trong sqlite cũng bằng cách này :) Một khi tôi có kết quả của các truy vấn làm thế nào để tôi hợp nhất hai cột trong câu hỏi? – Sohaib

1

Sử dụng VIEW là đúng cách để đi nếu bạn đang tìm kiếm dữ liệu để phản ánh các thay đổi trong bảng gốc.

Nếu bạn thực sự muốn các dữ liệu được sao chép vào một bảng mới, bạn sẽ cần phải làm một cái gì đó như:

CREATE TABLE tc(key,col1,col2) 

INSERT INTO tc (key,col1,col2) 
SELECT ta.key, ta.col1, tb.col2 
FROM ta FULL OUTER JOIN tb USING(key) 

Điều đó sẽ cư bảng mới với dữ liệu từ các bảng cũ, nhưng họ sẽ có thể thay đổi độc lập.

+3

Tôi tin rằng sqlite (trong câu hỏi) không làm FULL OUTER JOIN. – XTL

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