Łączenie Tabel

Odpowiedz Nowy wątek
2019-12-02 22:47
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 ?

edytowany 2x, ostatnio: Cisi204, 2019-12-02 22:53
A czemu pytasz? Jak sprawdzasz, to działa i własnym oczom nie wierzysz? ;) - Burmistrz 2019-12-02 22:52
No właśnie nie działa , i nie wiem co jest grane zwykłe inner join nie pomaga , bo dlaczego ma pomagac :D ? - Cisi204 2019-12-02 22:53
Mógłbyś wkleić swoje zapytanie, to łatwiej by było je poprawić - Burmistrz 2019-12-02 22:55

Pozostało 580 znaków

2019-12-02 23:02
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
edytowany 1x, ostatnio: Cisi204, 2019-12-02 23:29

Pozostało 580 znaków

2019-12-02 23:51
1

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


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2019-12-03 07:49
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 .

Czekaj Twoje zapytanie z 1 posta nie zwraca wyników ? Czy zwraca tylko nie wiesz jak dodać do niego jeszcze Imię, Nazwisko kierowcy bo teraz to już zgłupiałem (w poście poniżej zakładałem, że Twoje zapytanie nie zwraca wyników) - BlackBad 2019-12-03 08:00

Pozostało 580 znaków

2019-12-03 07:56
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'

Pozostało 580 znaków

2019-12-03 07:57
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

Pozostało 580 znaków

2019-12-03 08:30
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ść.

edytowany 3x, ostatnio: Cisi204, 2019-12-03 08:43
A próbowałeś tak, jak Ci pisałem wyżej? Nie wiem czy to zadziała ale spróbować można - pavarotti 2019-12-03 08:40

Pozostało 580 znaków

2019-12-03 08:56
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.

edytowany 1x, ostatnio: sieedukuje, 2019-12-03 09:12

Pozostało 580 znaków

2019-12-03 09:16
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
edytowany 1x, ostatnio: BlackBad, 2019-12-03 09:16

Pozostało 580 znaków

2019-12-03 21:07
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.

Pozostało 580 znaków

2019-12-03 22:06
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.

edytowany 1x, ostatnio: sieedukuje, 2019-12-03 22:08

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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