SQL Statement für 'unvollständige' Datensätze

Hallo,
ich möchte eine abfrage generieren:

tabelle client: mit betriebssystemversion, officeversion (beides nachschlagetabellen)und oracleversion (normaler string eintrag in der tabelle)
Hallo Forum

ich bekomme derzeit aber nur Datensätze, bei denen alle Daten dazu angegeben worden sind. Es kann aber sein, dass auch datensätze in der datenbank (SQL Server) vorhanden sind, bei denen nicht alle Daten einegetragen worden sind. Diese möchte ich aber auch angezeigt bekommen.

Mein momentanes SQL-Statement:

SELECT Client.Oracle_Client_Version, Client_Office.Description, Client.active, Client.License_count, Client.Client_OS_ID, Client.Client_Office_ID, Client_OS.Client_OS_Name, Client.Client_ID, Client_Office.Client_Office_ID AS Expr1, Client_OS.Client_OS_ID AS Expr2, Client.proj_nr AS Expr3, Client.LicenseKey
FROM Client LEFT OUTER JOIN
Client_Office ON Client.Client_Office_ID = Client_Office.Client_Office_ID LEFT OUTER JOIN
Client_OS ON Client.Client_OS_ID = Client_OS.Client_OS_ID
WHERE (Client.active = 1)

Was muss ich ändern, damit ich die „unvollständigen“ Datensätze auch angezeigt bekomme?
Über Tips wär ich sehr dankbar!

Hallo Ruth,

Hallo,

Hallo Forum

Eine Begrüßung hätte uns sicher auch gereicht :wink:

SELECT Client.Oracle_Client_Version,
Client_Office.Description, Client.active,
Client.License_count, Client.Client_OS_ID,
Client.Client_Office_ID, Client_OS.Client_OS_Name,
Client.Client_ID, Client_Office.Client_Office_ID AS Expr1,
Client_OS.Client_OS_ID AS Expr2, Client.proj_nr AS Expr3,
Client.LicenseKey
FROM Client LEFT OUTER JOIN
Client_Office ON Client.Client_Office_ID =
Client_Office.Client_Office_ID LEFT OUTER JOIN
Client_OS ON Client.Client_OS_ID = Client_OS.Client_OS_ID
WHERE (Client.active = 1)

Ich bin die ANSI Schreibweise nicht gewohnt (Oracle-verseucht…), aber wenn ich das richtig lese, dann sollte dein SELECT ziemlich genau das gewünschte Resultat bringen, also alle Sätze, die zumindest in der Tabelle „Client“ enthalten sind, unabhängig davon, ob es auch die Einträge in Client_Office oder Client_OS gibt.

Was muss ich ändern, damit ich die „unvollständigen“
Datensätze auch angezeigt bekomme?
Über Tips wär ich sehr dankbar!

Wenn du auch die haben willst, wo es keinen „Client“-Satz gibt, dann müstest du stattdessen FULL OUTER JOINS verwenden und die WHERE-Bedingung so erweitern, dass Active auch NULL sein darf.

Irgendwie habe ich das Gefühl, ich übersehe da was *grübel*. Ich probier’s nochmal anders. Dieses Script hier sollte eigentlich deine Situation ziemlich genau beschreiben:

CREATE TABLE t1 (a NUMBER);
CREATE TABLE t2 (b NUMBER);
CREATE TABLE t3 (c NUMBER);
INSERT INTO t1 VALUES (1);
INSERT INTO t1 VALUES (2);
INSERT INTO t1 VALUES (3);
INSERT INTO t1 VALUES (4);
INSERT INTO t2 VALUES (2);
INSERT INTO t2 VALUES (4);
INSERT INTO t3 VALUES (3);
INSERT INTO t3 VALUES (4);
SELECT \* FROM t1 LEFT OUTER JOIN t2 ON a=b
 LEFT OUTER JOIN t3 ON a=c
ORDER BY a;

 A | B | C
---+---+---
 1 | |
 2 | 2 |
 3 | | 3
 4 | 4 | 4

Das ist doch das, was du haben willst, oder?

Gruß
Martin