Tobi: SELCT ... WHERE Statement

Hallo,

ich moechte eine SQL-Abfrage durchfuehren, bei der Daten aus einer relationalen DB aus zwei Tabellen ausgelesen werden sollen (Tab1: DokumentID, DokumentTitel, StatusID Tab2: StatusID, Status). Es handelt sich um eine 1-n Beziehung.

Ich moechte fuer alle Dokumente den DokumentTitel und Status angezeigt bekommen.

Das habe ich wie folgt geloest:
SELECT
Tab1.*, Tab2.StatusID, Status
FROM
Tab1, Tab2
WHERE
Tab1.StatusID=Tab2.StatusID
AND
[weitere anweisungen]
ORDER BY
DokumentID

Problem: Die Daten sind nicht homogen, d.h. einigen Dokumenten ist kein Status zugeordnet.
Dadurch bekomme ich nur Records als Ergebnis, die eine StatusID haben, ich will aber auch alle Records die StatusID=NULL sind...

Wie kann ich das loesen?

Danke & Gruss
Tobi

  1. Hi,

    SELECT
    Tab1.*, Tab2.StatusID, Status
    FROM
    Tab1, Tab2
    WHERE

    (

    Tab1.StatusID=Tab2.StatusID
    AND
    [weitere anweisungen]

    )
    OR Tab1.StatusID IS NULL

    ORDER BY
    DokumentID

    ich will aber auch alle Records die StatusID=NULL sind...
    Wie kann ich das loesen?

    s.o.
    cu,
    Andreas

    --
    Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
    1. Hallo,

      OK. Ich habe es so geloest:

      SELECT
      Tab1.*, Tab2.StatusID, Status
      FROM
      Tab1, Tab2
      WHERE

      (
      Tab1.StatusID=Tab2.StatusID
      OR Tab1.StatusID IS NULL
      )
      AND
      (
      Tab1.WGID=Tab3.WGID
      OR Tab1.WGID IS NULL
      )
      [weitere anweisungen] <- werden per suchformular angehaengt

      ORDER BY
      DokumentID

      Aber das hat ein neues Problem aufgeworfen: Der Einfachkeit halber hatte ich verschwiegen, das ich noch eine weitere Tabelle habe, analog zu der Tab2:
      Tab3: WGID, WGName

      Wenn ich jetzt dieselbe AND OR Verknuepfung nochmal anhaenge, sprengt es das Ergebnis....Warum? ist da was mit den Klammern falsch?

      Danke & Gruss
      Tobi

  2. Versuchs mal so:

    SELECT
    Tab1.*, Tab2.StatusID, Status
    FROM
    Tab1, Tab2
    WHERE
    (Tab1.StatusID=Tab2.StatusID OR Tab1.StatusID = "")
    AND
    [weitere anweisungen]
    ORDER BY
    DokumentID

    Könnte sein, dass es klappt.
    input

  3. Hi Tobi

    Problem: Die Daten sind nicht homogen, d.h. einigen Dokumenten ist kein Status zugeordnet.
    Dadurch bekomme ich nur Records als Ergebnis, die eine StatusID haben, ich will aber auch alle Records die StatusID=NULL sind...

    Dein Freund ist ein outer join, genauer ein left outer
    join. Näheres erzählt dir sicher das Handbuch deiner
    Konkreten DB. Falls du Oracle benutzt, dann funktioniert
    das bei älteren Versionen nicht über das Schlüsselwort
    sondern über ein + beim Vergleich. Ansonsten unterstützen die mir bekannten Datenbanken left outer join (MySQL seit nem guten Jahr).

    Du solltest in solchen Fällen aber immer die verwendete Datenbank sagen damit man dir helfen kann.

    Gruss Daniela

    --
    Nein, wir frieren unsere Hühner nicht auf Gletschern fest.
    1. Dein Freund ist ein outer join, genauer ein left outer
      join. Näheres erzählt dir sicher das Handbuch deiner
      Konkreten DB. Falls du Oracle benutzt, dann funktioniert
      das bei älteren Versionen nicht über das Schlüsselwort
      sondern über ein + beim Vergleich. Ansonsten unterstützen die mir bekannten Datenbanken left outer join (MySQL seit nem guten Jahr).

      Du solltest in solchen Fällen aber immer die verwendete Datenbank sagen damit man dir helfen kann.

      Okay. Die verwendete Datenbank ist Access. Habe es mit LEFT JOIN (bei Access fuer LEFT OUTER JOIN) versucht, Problem scheint aber dann die WHERE-Anweisung zu werden (Kann man dann nicht mehr kombinieren?): Als Fehler kommt ein Syntaxfehler (fehlender Operator)....

      SELECT Tab1.*, Status, WGName FROM Tab1 LEFT JOIN Tab2 ON Tab1.StatusID=Tab2.StatusID LEFT JOIN Tab3 ON Tab1.WGID=Tab3.WGID WHERE [Anweisungen generiert aus einem Suchform] ORDER BY ....

      Oder liegt es an den vordefinierten Feldern (Zahl und Text)?

      Danke und Gruss
      Tobi