SQL jak połączyć pośrednią tabelę?

0

mam połączone tabele "wizyta" "Lekarz" "pacjent"

 
SELECT Wizyty.id_wizyty, pacjenci.nazwisko, Lekarze.nazwisko, domowa, platn, data_wizyty, cel_wizyty, objawy  
FROM Wizyty
LEFT JOIN Pacjenci ON Pacjenci.id_pacjenta=Wizyty.id_pacjenta
LEFT JOIN Lekarze ON Lekarze.id_lekarza=Wizyty.id_lekarza

jak dołączyć do tabeli "wizyta" jeszcze kolumny z nazwą leku tabela "leki", nazwa choroby "choroby" i nazwa badania "badania"

0

a próbowałeś joinować tabele posrednie i pozniej tabele "badania", "chroby", "leki" w ten sam sposób? chyba ze chcesz zeby wyniki wracaly nie zaleznie czy gdzies null jest to wtedy powinnes sie przyjrzec zapytaniu np LEFT OUTER JOIN

0

teraz rekordy mi się powtarzają a jest możliwość zrobienia tego inaczej aby się nie powtarzały rekordy? nie jestem tak obcykany w MS SQL i nie znam innego sposoby na połączenie tych tabel

 
SELECT Wizyty.id_wizyty, pacjenci.nazwisko, Lekarze.nazwisko, domowa, Leki.nazwa, Choroba.nazwa_choroby, Badania.nazwa
FROM Wizyty 
LEFT OUTER JOIN pacjenci on Pacjenci.id_pacjenta=Wizyty.id_pacjenta
LEFT OUTER JOIN Lekarze ON Lekarze.id_lekarza=Wizyty.id_lekarza 

LEFT OUTER JOIN Leki_Wizyty ON Leki_Wizyty.id_Wizyty=Wizyty.id_Wizyty
LEFT OUTER JOIN Leki ON Leki_Wizyty.id_leku=Leki.id_leku

LEFT OUTER JOIN Choroba_Wizyty ON Choroba_Wizyty.id_wizyty=Wizyty.id_Wizyty
LEFT OUTER JOIN Choroba ON Choroba_Wizyty.id_choroby=Choroba.id_choroby

LEFT OUTER JOIN Badania_Wizyty ON Badania_Wizyty.id_wizyty=Wizyty.id_Wizyty
LEFT OUTER JOIN Badania ON Badania_Wizyty.id_badania=Badania.id_badania
1

Nie zrobisz tego w jednym zapytaniu, ponieważ struktura danych jakie chcesz otrzymać nie jest płaska, przykładowo efektem wizyty może być przepisanie więcej niż jednego leku, ponadto możliwe że w trakcie jednej wizyty zostanie przeprowadzone więcej niż jeden rodzaj badania. Czasem i lekarz może zachorować, więc należy uwzględnić to w strukturze danych. Proponuję następująca strukturę tabel:

osoba

osoba_id PK
nazwisko
PESEL
...

pacjent

osoba_id PK
ubezbieczenie_nr
...

lekarz

osoba_id PK
licencja_nr
...

specjalnosc

specjalnosc_id PK
nazwa
...

lekarz_specjalnosc

osoba_id PK
specjalnosc_id PK
...

wizyta

wizyta_id PK
lekarz_id
pacjent_id
data
cel
opis_objawy
miejsce_wizyty
choroba_id
...

badanie

badanie_id PK
...

wizyta_badanie

wizyta_id PK
badanie_id PK

choroba

choroba_id PK
klasyfikacja_kod_nfz
...

lek

lek_id PK
nazwa
...

wizyta_lek

wizyta_id PK
lek_id PK

Przykładowe zapytanie o wizyty:

SELECT
wizyta.wizyta_id, wizyta.data, wizyta.miejsce, wizyta.choroba_id, choroba.nazwa, lek_oso.nazwisko, lekarz.licencja_nr, pac_oso.nazwisko,
FROM
wizyta, lekarz, pacjent, choroba, osoba AS lek_oso, osoba AS lek_pac
WHERE
wizyta.lekarz_id=lekarz.osoba_id AND wizyta.osoba_id=pacjent.osoba_id AND wizyta.choroba_id=choroba.choroba_id AND
wizyta.lekarz_id=lek_oso.osoba_id AND wizyta.pacjent_id=pac_oso.osoba_id

W trakcie wizyty przeprowadzono badania, podaj parametr

SELECT
badanie.nazwa
FROM
wizyta_badanie, badanie
WHERE
wizyta_badanie=:WIZYTA_ID AND wizyta_badanie.badanie=badanie.badanie_id
ORDER BY
badanie.nazwa

W trakcie wizyty przepisano leki, podaj parametr

SELECT
lek.nazwa
FROM
wizyta_lek, lek
WHERE
wizyta_lek=:WIZYTA_ID AND wizyta_lek.lek_id=lek.lek_id
ORDER BY
lek.nazwa

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