Łączenie Tabel

0

Cześć ,

Mam do was pytanie czy w SQL możliwe jest łączenie tabeli X z tabelą Y , w momencie kiedy tabela X nie ma klucza obcego tabeli Y ?

0

Schemat Mojej bazy:

TabelaKierowca:
KierowcaID
Imie
Nazwisko
PanstwoID

Tabela Panstwo:
PanstwoID
NazwaPanstwa
Ludnosc
SamochodID

Tabela Samochod:
SamochodID
Marka
RokProdukcji

chcę wyświetlic Imie i nazwisk kierowcy ktory ma samochod marki Audi.Tabelki Panstwo i Samochod mam połączone inner join :

Select NazwaPanswa,Ludnosc,Marka
from Panstwo as p
inner join Samochod as s on p.SamochodID=s.SamochodID
1

Czyli kierowca z samochodem jest związany z dokładnością do "nijak"?

0
_13th_Dragon napisał(a):

Czyli kierowca z samochodem jest związany z dokładnością do "nijak"?

To jest tylko przykład.
Kierowca i samochód w tym przykładzie nie są powiązani kluczem obcym , chcę wyświetlić dane z poziomu tabeli kierowca . Gdybym chciał to zrobić z poziomu tabeli Panstwo , zrobił bym to* join inner * i po problemie .

0

Nie jestem jakiś mega dobry z sql ale takie coś może zadziała?

select k.Imie, k.Nazwisko
from Kierowca k, Panstwo p, Samochod s
where k.PanstwoID = p.PanstwoID
    and p.SamochodID = s.SamochodID
    and s.Marka = 'Audi'
1

Zapytanie jest OK - widocznie nie masz wspólnych ID w tabelach (zakładam że ID w obu tablicach to jakiś INT - a nie na przykład char i problem białych znaków).

Możesz to prosto zobaczyć przerabiając zapytanie na:

Select NazwaPanswa,Ludnosc,Marka, p.SamochodID SamochodIDpanstwo, s.SamochodID samochodID
from Panstwo as p
FULL OUTER JOIN  Samochod as s on p.SamochodID=s.SamochodID
0

Panowie aby zobrazować mój problem w sposób bardziej rzeczywisty pokaże wam to na innym przykładzie , przyjmujemy że każda tabela jest wypełniona danymi:

**Tabela Kierowca: **

  • KierowcaID
    Imie
    Nazwisko
    PaństwoID
    PasażerID*

Tabela Państwo

  • PaństwoID
    NazwaPanstwa
    Ludnosc
    SamochodID*

** Tabela Pasażer**

  • PasażerID
    ImiePasazera
    NaziwskoPasazera*

Tabela Samochód

  • samochodID
    Marka
    RokProdukcji*

I chcę z tabeli kierowca wyświetlić imię,nazwisko kierowcy ,a także nazwę państwa z którego on pochodzi oraz imię i nazwisko pasażera z którym jedzie. Tabelki Państwo i Pasażer połączę z kierowcą inner join w ten sposób:

Select k.Imię,k.Nazwisko,p.NazwaPanstwa,pas.ImiePasazera,pas.Nazwiskopasażera
from Kierowca as k
inner join Państwo as p on k.PanstwoID=p.PanstwoID
inner join Pasazer as pas on k.PasazerID=pa.Pasazer ID

Mój problem polega na tym że nie wiem jak się dostać do marki samochodu aby z tabeli Kierowca wyświetlić tą wartość.

0

Zrób dwa joiny, weź tabelę "kierowcy" potem dołącz do niej Państwa (p.id = k.panstwo_id), potem dołącz samochody (p.samochod_id = s.samochod_id) a na końcu daj where i warunek wg którego chcesz wybrać kierowców.

0

Po prostu dodaj kolejny join i tyle ?

SELECT k.Imię, k.Nazwisko, 
		p.NazwaPanstwa,
		pas.ImiePasazera,pas.Nazwiskopasażera,
		s.Marka
FROM Kierowca as k
INNER JOIN Państwo as p
	ON k.PanstwoID = p.PanstwoID
INNER JOIN Pasazer as pas 
	ON k.PasazerID = pa.Pasazer ID
LEFT JOIN Samochód as s
	ON s.samochodID = p.SamochodID
0

Dzięki wszystkim za odpowiedz , left join załatwił sprawę , ale pojawił się drugi problem a mianowicie po prawidłowym wykonaniu tego selecta pojawiły się wiersze które są duplikatami . Mianowicie Imię kierowcy wyskakuje 3x takie samo, nazwisko kierowcy 3x takie samo,NazwaPanstwa 3x taka sama,inne zaś są dane pasażera. Chcę zaznaczyć ze ten problem pojawia się tylko gdy ozywam do tego tabelki Marka , bez tej tabelki te zapytanie wykonuje sie w sposób prawidłowo.

0

Z tego ci widziałem to chesz mieć kierowców, którzy mają auto marki "audi". Musisz właściwie zapisać warunek w where, który z tego miksu rekordów przefiltruje ci je i da ostateczny wynik czyli do tego wszystkie dopisać where s.marka == audi, ewentualnie jeśli będzie więcej rekordów to albo groupby albo distinct.

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