Announcement

Collapse
No announcement yet.

Ein kleines Problem mit outer join

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Ein kleines Problem mit outer join

    <BR>Hallo,
    <BR>
    <BR>ich habe ein kleines Problem mit einem Right <BR>Outer Join unter Interbase. Irgendwie muss
    <BR>es doch möglich sein die Ergebnisse der
    <BR>rechten Tabelle mit angezeigt zu bekommen.
    <BR>
    <BR>
    <PRE>
    SELECT Fm.FMI_BEZEICHNUNG, COUNT(F.FEH_ZEIT )
    FROM Fehler F
    RIGHT OUTER JOIN Fmeldung Fm
    ON (Fm.FMI_SID = F.FEH_FMISID)
    WHERE (F.FEH_ZEIT < '2/2/04')
    AND (F.FEH_ZEIT > '2/2/02')
    AND (FM.FMI_SID in (100,200,300,400))
    GROUP BY Fm.FMI_BEZEICHNUNG
    </PRE>
    <BR>
    <BR>Ach ja, woran ich dabei so richtig
    <BR>verzweifel ist, dass sobald die
    <BR>Zeiteingrenzung entfernt ist, die Abfrage
    <BR>wieder richtig funktioniert.
    <BR>
    <BR>thx
    <BR>Torsten

  • #2
    Hallo,

    ich habe leider keinen Ahnung von Interbase, aber wenn man in einem OuterJoin Bedingungen auf die Tabelle legt, in der eigentlich keine Daten enthalten sind, dann kann das nicht funktionieren. Durch den OuterJoin werden Zeilen der durch den Join dazu gelinkten Tabelle angezeigt, auch wenn fuer die JoinBedingung keine Werte gefunden werden. Die Spalten sind also alle NULL. Jeder Vergleich mit einem NULL Value geht aber sicher schief, so dass die Zeile nicht angezeigt wird. Du hast in deiner Abfrage sowohl auf F als auf FM Bedingungen gelegt. Eine davon scheint falsch zu sein und da du das Datum schon erwaehnt hast wird es das wohl sein. Du kannst allerdings die Datumseinschraenkung erweitern um (OR F.FEH_ZEIZ IS NULL) oder wie das in Interbase heisst. Dann sollten die Zeilen wieder erscheinene.

    Gruss

    Stefa

    Comment


    • #3
      Hallo Tosten,<BR><BR>wenn ich dich recht verstehe, dann möchtest du in jedem Fall die Daten der rechten Tabelle sehen, auch wenn es in der "linken" Tabelle keine Daten mit den Bedingungen gibt.<BR>Du musst dir aber darüber im Klaren sein, dass zuerst der FROM-Abschnitt ausgewertet wird und erst anschließend der WHERE-Abschnitt. Bis zu deinem JOIN ist also alles noch in Butter, die rechte Tabelle wird vollständig angezeigt und die linke mit NULL, wo die Entsprechung "Fm.FMI_SID = F.FEH_FMISID" nicht passt.<BR>Jetzt wird der Filter der WHERE Bedingung gesetzt, und das bedeutet, dass natürlich auch die Spalten der rechten Tabelle ausgeblendet werden, wo die Bedigung scheitert.<BR>Die Lösung deines Problems liegt also darin deine Zusatzbedingungen nicht in der WHERE Klausel zu formulieren, sondern zusätzlich im JOIN:<BR><PRE>
      SELECT Fm.FMI_BEZEICHNUNG, COUNT(F.FEH_ZEIT )
      FROM Fehler F
      RIGHT OUTER JOIN Fmeldung Fm
      ON (Fm.FMI_SID = F.FEH_FMISID)
      AND (F.FEH_ZEIT < '2/2/04')
      AND (F.FEH_ZEIT > '2/2/02')
      AND (FM.FMI_SID in (100,200,300,400))
      GROUP BY Fm.FMI_BEZEICHNUNG
      </PRE>
      Die Frage ist nur, ob das Interbase so zulässt. Der SQL-Server hat damit keine Probleme, Access kann das leider nicht. Also einfach testen.<BR><BR>Viele Grüße<BR>Ola

      Comment

      Working...
      X