Mysql abfrage
nameless
- datenbank
Hi vielleicht kann mir jemand mal auf die Sprünge helfen ich komme gerade einfach nicht drauf:
Ich möchte folgende, vereinfachte Datenbankabfrage machen:
select r.id, s.status, z.zustand, r.rart
from rad r, status s, zustand z, bolide b
where b.id = r.abladestelleid and s.id = r.statusid and z.id = r.zustandid
Nun ist es so das in meiner Haupttabelle nicht immer eine Abladestelleid vorhanden ist, ich möchte aber alle Datensätze erhalten und wenn eine Abladestelleid vorhanden ist soll sie durch den entsprechden Eintrag in der Tabelle "bolide" ersetzt werden.
So formuliert wie oben erhalte ich nur die Eintrage bei denen eine Abladestelle eingegeben ist.
Ich habe schon mit der IF() Funktion experimentiert aber ohne Erfolg.
Vielen Dank im vorraus
yo,
select r.id, s.status, z.zustand, r.rart
from rad r, status s, zustand z, bolide b
where b.id = r.abladestelleid and s.id = r.statusid and z.id = r.zustandid
diese schreibweise der implizieten joins ist nicht ratsam, weil es sehr schwer zu lesen ist. besser ist es grundsätzlich und zwar immer die expliziete schreibeweise zu benutzen, um tabellen miteinander zu joinen. auch ist es ratsam schlüsselwörter in sql gross zu schreiben.
Nun ist es so das in meiner Haupttabelle nicht immer eine Abladestelleid vorhanden ist, ich möchte aber alle Datensätze erhalten und wenn eine Abladestelleid vorhanden ist soll sie durch den entsprechden Eintrag in der Tabelle "bolide" ersetzt werden.
dein freund nennt sich OUTER JOIN. das und was ich dir oben geschrieben habe ergibt sich folgende abfrage:
SELECT r.id, s.status, z.zustand, r.rart
FROM rad r
INNER JOIN status s ON s.id = r.statusid
INNER JOIN zustand z ON z.id = r.zustandid
LEFT JOIN bolide b ON b.id = r.abladestelleid
;
Ilja
Hi,
»» select r.id, s.status, z.zustand, r.rart
»» from rad r, status s, zustand z, bolide b
»» where b.id = r.abladestelleid and s.id = r.statusid and z.id = r.zustandid
diese schreibweise der implizieten joins ist nicht ratsam, weil es sehr schwer zu lesen ist.
Das ist nicht ganz richtig, für einen Unerfahrenen ist seine Schreibweise wesentlich leichter zu verstehen als:
SELECT r.id, s.status, z.zustand, r.rart
FROM rad r
INNER JOIN status s ON s.id = r.statusid
INNER JOIN zustand z ON z.id = r.zustandid
LEFT JOIN bolide b ON b.id = r.abladestelleid
;
Ich habe erst join kapiert als ich solche direkten Gegenüberstellungen vor Augen hatte, und die sind leider selten.
Mario