nameless: Mysql abfrage

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

  1. Hi,

    OR

    Die Beispiele dort sollten aufschlussreich sein.

    Hans

  2. 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

    1. 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