SELCT ... WHERE Statement
Tobi
- datenbank
0 MudGuard0 Tobi
0 input0 Daniela Koller0 Tobi
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
Hi,
SELECT
Tab1.*, Tab2.StatusID, Status
FROM
Tab1, Tab2
WHERE
(
Tab1.StatusID=Tab2.StatusID
AND
[weitere anweisungen]
)
OR Tab1.StatusID IS NULL
ORDER BY
DokumentIDich will aber auch alle Records die StatusID=NULL sind...
Wie kann ich das loesen?
s.o.
cu,
Andreas
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
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
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
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