2013-04-03 12 views
37

Jestem nowy w PostgreSQL i próbuję uzyskać pisemne zapytanie. Jestem prawie pewien, że łatwo jest komuś, kto wie, co robi - po prostu nie! :)Dane JOIN PostgreSQL z 3 tabel

Zasadniczo mam trzy stoły. W pierwszym zapisuję szczegóły dotyczące pacjentów. W drugim zapisuję odniesienie do każdego z nich. W trzecim miejscu przechowuję link do ścieżki pliku obrazu. Nie zaprojektowałem bazy danych, więc nie jestem pewien, dlaczego tabela plików obrazów jest oddzielona, ​​ale tak właśnie jest.

Co chcę zrobić, to wybrać dane z pierwszej tabeli, łącząc dane z drugiej, a następnie trzeciej tabeli, więc w wyniku otrzymam nazwę ścieżki pliku &.

więc podstawowa struktura jest:

Table 1: 
person_id | name 

Table 2: 
person_id | image_id 

Table 3: 
image_id | `path filename` 

Co chcę zrobić to w jednej kwerendzie, chwycić osoby „name” i obraz „” ścieżka pliku.

Jestem zadowolony z odpowiedzi w stylu "szablonu" z wymaganym łączeniem. Nie potrzebuję, aby było napisane w prawdziwym kodzie. (tzn. myślę, że możesz po prostu napisać do mnie odpowiedź, która mówi "SELECT table1.name, table3.pathfilename od JOIN ... etc ...").

Dzięki! John

+0

byłoby przydatne, aby pokazać nam, co pan już próbował i jakie badania mają ukończyłeś, zanim wkleiłeś pytanie. podświetliłoby to, że sam próbowałeś rozwiązać go samodzielnie. – BlueTomato

Odpowiedz

74

Coś jak:

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

Dziękuję wszystkim! Był w stanie to idealnie dostosować. –

11

Może następuje czego szukasz:

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

wow, naturalne dołączenie. Każdego dnia uczysz się czegoś nowego. Wygląda niebezpiecznie ... – digitaljoel

+0

@digitaljoel Nie rozumiem, dlaczego jest to niebezpieczne, zwłaszcza, że ​​OP wydaje się mieć tabele, w których wyraźnie wybrał pasujące nazwy kolumn. Dlaczego nie wykorzystać tego na swoją korzyść? –

+11

Powiedzmy, że w przyszłym miesiącu w tabeli 1 on dodaje kolumnę o nazwie "last_used" wskazującą, kiedy ostatnio zalogowany był użytkownik. Miesiąc później dodaje także kolumnę w tabeli3 o nazwie "last_used", która wskazuje ostatni raz, kiedy obraz był wyświetlany. Czy naturalna przyłączyła się teraz niepoprawnie próba zastosowania tych kolumn i nagle jego zapytanie zwróciło znacznie mniej informacji niż kiedyś i nie może zrozumieć dlaczego, ponieważ nowe kolumny zostały dodane w odstępie miesiąca i 2 miesiące po pierwotnym zapytanie zostało napisane? – digitaljoel

Powiązane problemy