2013-04-03 35 views
37

Tôi mới dùng PostgreSQL và cố gắng lấy một truy vấn được viết. Tôi khá chắc chắn rằng nó dễ dàng cho một người biết những gì họ đang làm - Tôi chỉ không! :)PostgreSQL THAM GIA dữ liệu từ 3 bảng

Về cơ bản tôi có ba bảng. Trong lần đầu tiên, tôi lưu trữ thông tin chi tiết về bệnh nhân. Trong lần thứ hai, tôi lưu trữ một tham chiếu đến từng hình ảnh của chúng. Trong phần ba, tôi lưu trữ liên kết đến đường dẫn tệp cho hình ảnh. Tôi đã không thiết kế cơ sở dữ liệu, vì vậy tôi không chắc chắn lý do tại sao các tập tin hình ảnh bảng được tách ra, nhưng nó được.

Điều tôi muốn có thể làm là chọn dữ liệu từ bảng đầu tiên, tham gia dữ liệu từ bảng thứ hai và thứ ba để tôi kết thúc với tên đường dẫn tệp & trong kết quả.

Vì vậy, cấu trúc cơ bản là:

Table 1: 
person_id | name 

Table 2: 
person_id | image_id 

Table 3: 
image_id | `path filename` 

Những gì tôi muốn làm là trong một truy vấn, lấy 'name' của người đó và những hình ảnh 'con đường filename'.

Tôi hài lòng với câu trả lời kiểu "mẫu" có tham gia mà tôi cần. Tôi không cần nó được viết bằng mã thực. (tức là tôi nghĩ bạn chỉ có thể viết cho tôi một câu trả lời cho biết "SELECT table1.name, table3.pathfilename FROM JOIN ... etc ...").

Cảm ơn !! John

+0

nó sẽ là hữu ích để cho chúng ta thấy những gì bạn đã cố gắng đã và loại nghiên cứu có bạn đã hoàn thành trước khi bạn dán câu hỏi. nó sẽ làm nổi bật thực tế bạn đã cố gắng để giải quyết nó cho mình đầu tiên. – BlueTomato

Trả lời

74

Cái gì như:

select t1.name, t2.image_id, t3.path 
from table1 t1 inner join table2 t2 on t1.person_id = t2.person_id 
inner join table3 t3 on t2.image_id=t3.image_id 
+0

Xin cảm ơn tất cả mọi người! Có thể thích nghi điều này một cách hoàn hảo. –

11

Có lẽ đây là những gì bạn đang tìm kiếm:

SELECT name, pathfilename 
    FROM table1 
    NATURAL JOIN table2 
    NATURAL JOIN table3 
    WHERE name = 'John'; 
+1

wow, tham gia tự nhiên. Bạn học được điều gì mới mỗi ngày. Trông nguy hiểm ... – digitaljoel

+0

@digitaljoel Tôi không thấy tại sao nó nguy hiểm, đặc biệt là vì OP dường như có các bảng nơi ông đã chọn một cách rõ ràng các tên cột phù hợp. Tại sao không sử dụng điều này để lợi thế của mình? –

+11

giả sử tháng tiếp theo trong bảng 1, anh ta thêm cột có tên "last_used" cho biết lần cuối cùng người dùng đăng nhập. Một tháng sau đó, anh ta cũng thêm cột trong table3 có tên "last_used" cho biết lần cuối cùng hình ảnh được hiển thị. Chẳng phải việc tham gia tự nhiên giờ cũng không cố gắng áp dụng các cột đó và đột nhiên truy vấn của anh ta trả lại ít thông tin hơn nó được sử dụng và anh ta không thể hiểu tại sao vì các cột mới được thêm vào cách nhau 1 tháng và 2 tháng sau bản gốc truy vấn đã được viết? – digitaljoel

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