Sonic: SQL- LEFT JOIN - 3 Tabellen

Hallo,

ich möchte bestimmte Daten aus 3 Tabellen selektieren.

Tabelle1 hat id*, name* ...
Tabelle2 hat name* ...
Tabelle3 hat id* ...

Ich möchte erstens, dass alle Datensätze aus der Tabelle1 angezeigt werden. Zweitens, auch Infos aus den Tabellen 2 und 3 anzeigen, falls vorhanden.

So habe ich angefangen..:

SELECT Tabelle1.*, Tabelle2.*, Tabelle3.*
  FROM Tabelle1 LEFT JOIN Tabelle2 ON Tabelle1.name = Tabelle2.name LEFT JOIN Tabelle3 ON Tabelle1.id = Tabelle3.id

Das Ergebnis:
Es werden alle Datensätze aus der Tabelle1 angezeigt, aber, lösche ich einen Datensatz aus der Tabelle3, dann wird die Anzahl der angezeigten Datensätze um eins weniger (also die Abfrage ist schon mal falsch). Lösche ich einen Datensatz aus der Tabelle2, wird die richtige Anzahl von Datensätzen angezeigt(also Verknüpfung zwischen t1 und t2 ist richtig).
Was mache ich falsch?

Danke

  1. Hi,

    wir habe auch noch irgendwo zwei Feature-Artikel zum Thema JOINS, aber mir fehlen gerade meine Bookmarks, ich trags später nach wenn es bis da noch keiner getan hat.

    Ansonsten, zu deinem Problem konkret:
    Deine Abfrage schaut für mich richtig aus: Gib mir auf jeden Fall alle Datensätze aus Tabelle1, sofern vorhanden ergänze durch Sätze aus Tabellen zwei und drei.

    Tabelle1 enthält einen Satz x
    Tabelle2 enthält zu Satz x zwei Informationen
    Tabelle3 enthält zu Satz x zwei Informationen

    Ergebnis bei aufeinander folgenden LEFT JOINs: 4 Datensätze
    Wenn du jetzt einen Satz aus Tabelle3 löscht (oder aus Tabelle2) verlierst du jeweils zwei Ergebnisse.

    Was ich im Moment nicht so ganz verstehe ist, wo dein Problem ist, bzw. warum du dein Problem auf die Anzahl der resultierenden Datensätze beschränkst. Hast du mal geguckt, was da inhaltlich passiert?

    Ach ja, Anmerkung am Rande: Warum soll ich nicht SELECT * schreiben

    MfG
    Rouven

    --
    -------------------
    ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
    1. Tabelle1 enthält einen Satz x
      Tabelle2 enthält zu Satz x zwei Informationen
      Tabelle3 enthält zu Satz x zwei Informationen

      Ergebnis bei aufeinander folgenden LEFT JOINs: 4 Datensätze
      Wenn du jetzt einen Satz aus Tabelle3 löscht (oder aus Tabelle2) verlierst du jeweils zwei Ergebnisse.

      Ich sag mal so..Ich habe Daten auf 3 Tabellen verteilt. Nun möchte ich alle Infos z.B. zu "Schumacher" anzeigen lassen.

      Select * from Tabelle1

      -- hier sollen die restlichen Infos zu "Schumacher" aus Tabelle 2 und 3 selektiert werden (falls vorhanden, wenn nicht dann nur Infos aus Tabelle1 anzeigen)

      where Tabelle1='Schumacher'

      :(

      1. Hi nochmal,

        wie ich gerade schon mit meinem Beispiel angedeutet hatte, mit einer Abfrage ist das ein Problem, weil sich das ganze etwas aufbläht. Wenn du das vermeiden willst helfen nur 2 (3) Abfragen.

        MfG
        Rouven

        --
        -------------------
        ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
    2. Hallo

      wir habe auch noch irgendwo zwei Feature-Artikel zum Thema JOINS, aber mir fehlen gerade meine Bookmarks, ich trags später nach wenn es bis da noch keiner getan hat.

      Jemand hat es getan :-)

      Einführung Joins
      Fortgeschrittene Joins

      Ich glaube Abschnitt Drei Tabellen, zwei unterschiedliche Joinspalten trifft die Problematik von Sonic. Allerdings fürchte ich, dass das Tabellendesign suboptimal ist.

      Freundliche Grüße

      Vinzenz

      1. Hi Vinzenz,

        mal so eine Frage, ist von deinem Artikel nochmal irgendwann eine aktualisierte Version hochgegangen? Ich hatte Tim nochmal was geschickt, aber irgendwie scheint der so im Stress zu sein, dass sämtliche Updates da bisher untergegangen sind.

        MfG
        Rouven

        --
        -------------------
        ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(