Chris: JOIN über mehrere Tabellen

Hallo,

ich stecke irgendwie bei einer SQL-Anweisung fest: Ich habe eine Haupttabelle und 3 Nebentabellen die ich alle mit LEFT JOIN verbinden möchte. Alle 4 Tabellen haben eine "herstellernr" gemeinsam.
Jetzt möchte ich aber nur die Inhalte von den 3 Nebentabellen anzeigen lassen, welche NICHT mit der "herstellernr" in der Haupttabelle vorkommen. Wie müsste ich da rangehen? Weil, ich brauch doch schon allein die "herstellernr" zum joinen oder?

Grüße

Christoph

  1. yo,

    stichwort outer joins:

    SELECT t2.spalte1, t2.spalte2
    FROM nebentabelle t2
    LEFT JOIN haupttabelle t1 ON t1.herstellernr = t2.herstellernr
    WHERE t1.herstellernr IS NULL

    Ilja

    1. hi

      stichwort outer joins:

      SELECT t2.spalte1, t2.spalte2
      FROM nebentabelle t2
      LEFT JOIN haupttabelle t1 ON t1.herstellernr = t2.herstellernr
      WHERE t1.herstellernr IS NULL

      Ok, dann sollte ich wohl auch OUTER JOIN schreiben ;) Aber du meinst sicherlich das Richtige, hehe. Ich werd's mal ausprobieren.

      Chris

    2. Ok,

      noch eine Frage:

      Wäre das so richtig für alle 3 Nebentabellen?

      SELECT t1.herstellernr, t2.*, t3.*, t4.*
      FROM nebentabelle1 t2
      LEFT OUTER JOIN haupttabelle t1 ON t1.herstellernr = t2.herstellernr
      LEFT OUTER JOIN nebentabelle2 t3 ON t3.herstellernr = t2.herstellernr
      LEFT OUTER JOIN nebentabelle3 t4 ON t4.herstellernr = t2.herstellernr
      WHERE t1.herstellernr IS NULL

      Grüße

      Christoph

      1. yo,

        Wäre das so richtig für alle 3 Nebentabellen?

        nein, so geht es nicht. zum einen macht es keinen sinn, die spalte t1.herstellernr auszugaben, wenn du weiter unten in der where klausel dort nach nur null werten abfragst. zum anderen nehme ich an, dass du mit neben und haupttabelle meinst, dass die nebenschlüssel einen fremdschlüssel (herstellernr) der haupttabelle enthalten, du joinst aber unter anderem die nebentabelle t2 mit anderen nebentabellen.

        das beste ist wohl, du nimmst die abfrage aus meinem ersten beispiel (die OUTER klausel kann man ruhig weglassen, also LEFT JOIN reicht vollkommen aus) und machst das gleiche für alle andere "nebentabellen" und verbindest die drei sql anweisung mit UNION ALL, wobei zu beachten ist, dass die spaltenanzahl nach der select klausel gleich sein muss.

        SELECT t2.spalte1, t2.spalte2
        FROM nebentabelle t2
        LEFT JOIN haupttabelle t1 ON t1.herstellernr = t2.herstellernr
        WHERE t1.herstellernr IS NULL
        UNION ALL
        SELECT t3.spalte1, t3.spalte2
        FROM nebentabelle t3
        LEFT JOIN haupttabelle t1 ON t1.herstellernr = t3.herstellernr
        WHERE t1.herstellernr IS NULL
        UNION ALL
        SELECT t4.spalte1, t4.spalte2
        FROM nebentabelle t4
        LEFT JOIN haupttabelle t1 ON t1.herstellernr = t4.herstellernr
        WHERE t1.herstellernr IS NULL

        Ilja