2013-04-03 71 views
37

我是PostgreSQL的新手,試圖獲得寫入的查詢。我很確定,知道自己在做什麼的人很容易 - 我只是不知道! :)PostgreSQL從3個表中加入數據

基本上我有三個表。首先,我存儲有關患者的詳細信息。第二,我存儲對他們每個圖像的參考。第三,我存儲鏈接到圖像的文件路徑。我沒有設計數據庫,所以我不知道爲什麼圖像文件表是分開的,但它是。

我希望能夠做的是從第一個表中選擇數據,從第二個和第三個表中加入數據,所以我最終在結果中名爲&文件路徑。

所以基本結構是:

Table 1: 
person_id | name 

Table 2: 
person_id | image_id 

Table 3: 
image_id | `path filename` 

我想要做的就是在一個查詢,搶人的「姓名」和圖像「路徑文件名」。

我很滿意我需要的連接的「模板」樣式的答案。我不需要它寫在實際的代碼中。 (即我在想你可以給我寫一個答案,說「SELECT table1.name,table3.pathfilename FROM JOIN ... etc ...」)。

謝謝! 約翰

+0

這將是有益的向我們展示你嘗試過什麼已經和什麼樣的研究有你在完成這個問題之前完成了。它會突出顯示你首先嚐試自己解決的事實。 – BlueTomato 2018-02-28 09:26:25

回答

74

喜歡的東西:

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

謝謝大家!能夠完美地適應這一點。 – 2013-04-04 03:01:46

11

也許下面是你在找什麼:

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

哇,自然加入。你每天學習新的東西。看起來很危險...... – digitaljoel 2013-04-03 22:58:43

+0

@digitaljoel我不明白爲什麼它很危險,尤其是因爲OP似乎有表格,他明確選擇了匹配的列名。爲什麼不使用這個對他有利呢? – 2013-04-03 23:01:36

+11

比方說,在下個月的table1中,他添加了一個名爲「last_used」的列,表示用戶最後一次登錄。在此之後的一個月,他還在table3中添加了一個名爲「last_used」的列,該列指示圖像最後一次顯示的時間。現在的自然連接現在是不是也不適當地嘗試應用這些列,並且突然間他的查詢返回的信息比以前少得多,他也無法弄清楚爲什麼,因爲新列是在原始文件之後的一個月和兩個月後添加的查詢被寫入? – digitaljoel 2013-04-03 23:15:52