łączenie 3 tabel (relacja)

0

Witam
Moje tabele to : WYBOR_PROJEKTU, gdzie mam kolumny: NR_INDEKSU, WYBOR (gdzie WYBOR ma takie same wartości co pole ID w drugiej tabeli), OCENA

TABELA PROJEKTY zawiera kolumny : ID (wartości 0,1,2,3...) TEMAT

TABELA STUDENCI zawiera NR_INDEKSU, IMIE, NAZWISKO

Teraz chciałbym wyświetlić zawartości tych 3 tabel = może da się powiązać jakoś przez zapytanie SELECT te 3 tabele tak żeby wyświetliło IMIE, NAZWISKO, TEMAT, OCENA
(może powiązać ID z tabeli PROJEKTY z kolumną WYBOR-tabela WYBOR_PROJEKTU oraz NR_INDEKSU z tabeli WYBOR_PROJEKTU z NR_INDEKSU z tabeli STUDENCI)

Da się stworzyć takie zapytanie łączące te 3 tabele ?
Dzięki wielkie za wszelką pomoc
Jacek

0
Jacek Wątroba napisał(a)

Witam
Moje tabele to : WYBOR_PROJEKTU, gdzie mam kolumny: NR_INDEKSU, WYBOR (gdzie WYBOR ma takie same wartości co pole ID w drugiej tabeli), OCENA

TABELA PROJEKTY zawiera kolumny : ID (wartości 0,1,2,3...) TEMAT

TABELA STUDENCI zawiera NR_INDEKSU, IMIE, NAZWISKO

Teraz chciałbym wyświetlić zawartości tych 3 tabel = może da się powiązać jakoś przez zapytanie SELECT te 3 tabele tak żeby wyświetliło IMIE, NAZWISKO, TEMAT, OCENA
(może powiązać ID z tabeli PROJEKTY z kolumną WYBOR-tabela WYBOR_PROJEKTU oraz NR_INDEKSU z tabeli WYBOR_PROJEKTU z NR_INDEKSU z tabeli STUDENCI)

Da się stworzyć takie zapytanie łączące te 3 tabele ?
Dzięki wielkie za wszelką pomoc

W ten sposób połączę 2 tabele : SELECT a.TEMAT,b.OCENA FROM W_PROJEKTU B, PROJEKTY A WHERE A.ID=B.WYBOR , a jak tu jeszzcze dopiąć tabele STUDENCI gdzie STUDENCI.NR_INDEKSU=W_PROJEKTU.NR_INDEKSU ?
Jacek

0

Nie łącz przez WHERE tylko przez JOIN. Zamiast:
SELECT a.TEMAT,b.OCENA FROM W_PROJEKTU B, PROJEKTY A WHERE A.ID=B.WYBOR
daj
SELECT a.TEMAT,b.OCENA FROM W_PROJEKTU B JOIN PROJEKTY A ON A.ID=B.WYBOR

i z 3 tabelą będzie pewnie tak:
SELECT a.TEMAT,b.OCENA, c.* FROM W_PROJEKTU B JOIN PROJEKTY A ON A.ID=B.WYBOR JOIN STUDENCI C ON C.NR_INDEKSU=b.NR_INDEKSU

pozdrawiaMM
PS. Poczytaj o JOINach - może będziesz musiał użyć LEFT (RIGHT), bądź FULL

0

Pzez WHERE też można łączyć. W przypadku 3 tabel takie coś działa:

SELECT * FROM a, b, c WHERE a.a_id = b.a_id AND b.b_id = c.c_id;

1

Witam
z tego co zrozumialem nalezy wpisac takie zapytanie:

select imie,nazwisko,temat,ocena
from wybor_projektu
inner join tabela_projekty
on wybor_projektu.wybor=tabela_projekty_wybor
inner join tabela_studenci
on wybor_projektu.nr_indeksu=tabela_studenci.nr_indeksu

Gdybys dal schemat tabeli to bym ci zrobil idealnie.

Co do innych odpowiedzi left,right,full stosuje sie przy laczeniu zewnetrznym, a tutaj nalezy zastosowac naturalne. Roznica jest taka ze laczenie zewnetrzne ( outer join ) wyswietla pola ktore w danym atrybucie maja wartosc null.
Co do full outer join nigdy go nie stosoj, mocno obciaza baze, zazwyczaj ( 95% ) stosuje sie lewe dowiazanie ( left outer join )
Co do laczenia poprzez where mam mieszane uczucia, dlaczego ? poniewaz w from stosujesz nazwy 3 tabeli co moze zakonczyc sie pewnie bledem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1