Ausgabe von Datengruppen mit nicht belegten Feldern

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

eve
**
Beiträge: 45
Registriert: Mo, 15.06.2009 22:17

Ausgabe von Datengruppen mit nicht belegten Feldern

Beitrag von eve »

Hallo,

Ich habe eine Datenbank mit zwei Tabellen
Tabelle 1: Personen (PersonenID – Name – ElternID)
Tabelle 2: Familie (FamilienID – MannID – FrauID)

Ich möchte gerne einen Bericht erstellen in dem alles zu einer Person angegeben ist, also:
PersonenID – Name – Ehepartner – Name_Kind – Mutter – Vater

Ich habe mittlerweile einige Abfragen, die mir die Daten wie gewünscht verlinkt ausgeben. Da ein Bericht aber nur eine einzelne Abfrage als Basis haben kann, muß ich jetzt eine Abfrage erstellen, die mir die Daten alle in einer einzigen Abfrage darstellt. Im Prinzip habe ich das auch schon mit folgendem geschafft:

Code: Alles auswählen

SELECT DISTINCT "A"."PersonenID", "A"."Name", "F"."FamilienID", "B"."Name" AS "Ehepartner", "C"."Name" AS "Name_Kind", ( SELECT "Name" FROM "Personen" WHERE "PersonenID" = "Familie"."FrauID" ) AS "Mutter" FROM "Personen" "A", "Familie" "F", "Personen" "B", "Personen" "C", "Personen", "Familie" WHERE ( ( "A"."PersonenID" = "F"."MannID" AND "B"."PersonenID" = "F"."FrauID" ) OR ( "A"."PersonenID" = "F"."FrauID" AND "B"."PersonenID" = "F"."MannID" ) ) AND "C"."ElternID" = "F"."FamilienID" AND "A"."ElternID" = "Familie"."FamilienID"
Nur werden dabei leider nur die Personen ausgegeben für die eben auch ein Ehepartner, Kinder und Eltern angegeben sind. Das ist aber nicht für alle Personen der Fall. Ich brauche aber einen Bericht, in dem alle Personen ausgegeben werden, auch die, die nicht verheiratet sind, keine Kinder habe oder bei denen die Eltern unbekannt sind. Bei der Ausgabe soll dann das entsprechende Feld einfach leer bleiben.
Wie bringe ich die Abfrage dazu auch diese Daten auszugeben und sich nicht nur auf die mit allen ausgefüllten Feldern zu beschränken?

Gruß,
eve
gogo
*****
Beiträge: 207
Registriert: Mi, 10.11.2010 13:11

Re: Ausgabe von Datengruppen mit nicht belegten Feldern

Beitrag von gogo »

Du musst die Verbindung zwischen den Tabellen als "OUTER JOIN" definieren. Wenn Du die Abfrage per Abfrageeditor erstellt hast, kannst Du einfach mit Rechts auf die Beziehungslinie klicken, dann 'bearbeiten' und dann die Verbundeigenschaften einstellen (linker oder rechter Verbund)

g
g
LucidLynx/WinXP LibreOffice v3.3.2 ab 03/12 v3.3.2 & v3.4.5
eve
**
Beiträge: 45
Registriert: Mo, 15.06.2009 22:17

Re: Ausgabe von Datengruppen mit nicht belegten Feldern

Beitrag von eve »

Hallo gogo,

Ich habe die Abfrage ursprünglich manuell in der SQL-Ansicht zusammengebastelt.
Als ich jetzt aber die Abfrage mit "Bearbeiten" geöffnet habe um den Vorschlag von dir zu probieren, bin ich über folgendes gestolpert:
Sobald ich in dieser Ansicht versuche etwas zu ändern oder auch ohne Änderung die Abfrage ausführen möchte bekomme ich die Meldung "Syntax error in SQL expression".
Wenn ich die Abfrage aber in der SQL-Ansicht öffne, kann ich die Abfrage ohne Probleme ausführen.
Außerdem besteht hier eh nur eine Beziehungslinie zwischen den beiden Tabellen "A" und "Familie"

Gruß,
eve
gogo
*****
Beiträge: 207
Registriert: Mi, 10.11.2010 13:11

Re: Ausgabe von Datengruppen mit nicht belegten Feldern

Beitrag von gogo »

der 'Syntax-Error' ist vermutlich eine 'falsche'-Fehlermeldung. Besser müsste es heissen: der Editor kann die SQL-Anweisung nicht korrekt auflösen, vermutlich liegt das an folgender Textpassage: " SELECT "Name" FROM "Personen" WHERE "PersonenID" = "Familie"."FrauID" " - ist also eher eine unzureichende Programmierung des Editors...

anyway:

die Syntax für die outer-joins lautet:

Code: Alles auswählen

SELECT *hier kommen die gewünschten Feldnamen rein*
FROM { OJ
             Datenbank.Tabelle1 AS AliasNameTabelle1
       RIGHT OUTER JOIN
             Datenbank.Tabelle2 AS AliasNameTabelle2
       ON Tabelle1.Feldname_In_Tabelle1 = Tabelle2.Feldname_In_Tabelle2
      }
(Anführungszeichen zwecks besserer Übersichtlichkeit weggelassen!)

erfasst ALLE Datensätze der RECHTEN Tabelle (Tabelle2) und nur die DS der linken Tabelle (Tabelle1) für die die ON-Bedingung zutrifft.

Dasselbe Statement mit "LEFT OUTER JOIN" erfasst alle DS der linken Tabelle (Tabelle1) und nur ...


g
g
LucidLynx/WinXP LibreOffice v3.3.2 ab 03/12 v3.3.2 & v3.4.5
eve
**
Beiträge: 45
Registriert: Mo, 15.06.2009 22:17

Re: Ausgabe von Datengruppen mit nicht belegten Feldern

Beitrag von eve »

Hallo gogo,

Nach deinem Hinweis habe ich mich gestern intensiv in die „OUTER JOIN“ Verbindungen eingearbeitet. Ich bin ich zwar ein gutes Stück weitergekommen, aber leider bin ich noch immer nicht ganz am Ziel.

Mit den beiden Tabellen "Personen" und "Familie "habe ich folgende Abfragen erstellt:
Abfrage_Familie:

Code: Alles auswählen

SELECT "A"."PersonenID", "A"."Name", "Familie"."FamilienID", "B"."Name" AS "Ehepartner", "C"."Name" AS "Name_Kind" FROM "Personen" AS "A", "Familie", "Personen" AS "B", "Personen" AS "C" 
WHERE "C"."ElternID" = "Familie"."FamilienID" 
AND ( "A"."PersonenID" = "Familie"."MannID" AND "B"."PersonenID" = "Familie"."FrauID" 
OR "A"."PersonenID" = "Familie"."FrauID" AND "B"."PersonenID" = "Familie"."MannID" )
Abfrage_Eltern:

Code: Alles auswählen

SELECT "Personen"."PersonenID", "Personen"."Name" AS "Name", 
( SELECT "Name" FROM "Personen" WHERE "PersonenID" = "Familie"."MannID" ) AS "Vater", 
( SELECT "Name" FROM "Personen" WHERE "PersonenID" = "Familie"."FrauID" ) AS "Mutter" 
FROM "Personen", "Familie" 
WHERE "Personen"."ElternID" = "Familie"."FamilienID"
Mit "Abfrage_all" habe ich das dann verknüpft:

Code: Alles auswählen

SELECT "A"."PersonenID", "A"."Name", "A"."ElternID", "E"."Vater", "E"."Mutter", "F"."FamilienID", "F"."Ehepartner", "F"."Name_Kind" 
FROM { OJ "Abfrage_Familie" AS "F" 
RIGHT OUTER JOIN "Personen" AS "A" ON "F"."PersonenID" = "A"."PersonenID" 
LEFT OUTER JOIN "Abfrage_Eltern" AS "E" ON "F"."PersonenID" = "E"."PersonenID" } 
ORDER BY "A"."PersonenID" ASC
Jetzt bekomme ich zwar eine Ausgabe mit allen gewünschten Spalten, bei der auch die Daten richtig zugeordnet sind, aber leider werden die Eltern nur für die Personen ausgegeben, die auch einen Ehepartner haben (also in der Tabelle Familie verzeichnet sind).
Ich habe schon alles mögliche probiert, kriege das aber einfach nicht hin. Die obige Abfrage_all ist die, mit der ich der Lösung bis jetzt nächsten gekommen bin, aber das letzte Stückchen fehlt mir leider noch. Was muss ich denn da noch ändern?

Gruß,
eve
Antworten