Seite 1 von 1

Mehrere Tabellen in einer Abfrage nutzen

Verfasst: So 21. Okt 2012, 20:00
von thepower
Guten Tag,
versuche gerade mit LibreOffice eine Adressverwaltung zu "bauen". Mein Plan war folgender, ich nehme eine Person mit den Datenfeldern:
  • PersonID, Nachname, Vorname, Geburtsdatum, TitelID, ZusatzID
eine weiter Tabelle mit den Datenfeldern:
  • TitelID, Titel
und dann noch eine weitere Tabelle mit den Datenfeldern:
  • ZusatzID, Zusatz
die ID's sind alles fortlaufende Nummern und in der Tabelle Person wollte ich eine Abfrage basteln um zu folgendem Ergebnis zu kommen:
  • Nachname, Vorname, Titel, Zusatz
also z. b.: Else, Muster, Dr. med., jun

Wenn ich eine Abfrage baue mit nur einer Beziehung zu Zusatz oder Titel, bekomme ich ein Ergebnis. wenn ich dann versuche die verknüpfung zur dritten Tabelle herzustellen kommt immer eine Fehlermeldung... Wie muß ich die Tabellen verbinden damit er sowohl aus den Namenszusätzen und den Titeln die Infos zusammenbaut?

Vielleicht hilft's wenn ich die Fehlermeldung mit eingebe

Code: Alles auswählen

Das SQL-Kommando, welches zu diesem Fehler führte, ist:

SELECT DISTINCT "Personen"."ID" AS "ID", "Personen"."Nachname" AS "Nachname", "Personen"."Vorname" AS "Vorname", "Personen"."2. Vorname" AS "2. Vorname", "Personen"."Titel" AS "Titel", "Personen"."Geburtstag" AS "Geburtstag", "Personzusatz"."Namenszusatz" AS "Namenszusatz" FROM { OJ "Personzusatz" RIGHT OUTER JOIN "Persontitel" RIGHT OUTER JOIN "Personen" ON "Persontitel"."Titel" = "Personen"."Titel" ON "Personzusatz"."ID-Zusatz" = "Personen"."Namenszusatz" } ORDER BY "Nachname" ASC, "Vorname" ASC, "Geburtstag" ASC

Re: Mehrere Tabellen in einer Abfrage nutzen

Verfasst: Mo 22. Okt 2012, 16:48
von RobertG
Hallo,

die grafische Benutzeroberfläche kann je nach verwandter Base-Version noch Probleme mit mehrere Joins haben.
Standardmäßig funktioniert so etwas so:

Code: Alles auswählen

SELECT "Medien"."Titel", "Untertitel"."Untertitel",
"Verfasser"."Verfasser"
FROM "Medien"
LEFT JOIN "Untertitel" ON "Medien"."ID" = "Untertitel"."Medien_ID"
LEFT JOIN "rel_Medien_Verfasser" ON "Medien"."ID" =
"rel_Medien_Verfasser"."Medien_ID"
LEFT JOIN "Verfasser" ON "rel_Medien_Verfasser"."Verfasser_ID" =
"Verfasser"."ID"
Ich nutze hier "LEFT JOIN", weil dass für mich klarer aufzubauen ist. Zuerst kommt die Tabelle, von der ich alle Datensätze haben will. Im obigen Fall sollen alle Titel angezeigt werden. Also steht ganz links "Medien", weil diese Tabelle alle Titel enthält. So arbeite ich mich von der Tabelle aus mit Beziehungen zu allen anderen Tabellen vor - immer mit LEFT JOIN (Bindung zur Tabelle, die links von der Zuweisung steht).

Die grafische Benutzeroberfläche macht daraus eine Konstruktion mit geschweiften Klammern. Dein Code müsste entsprechend lauten:
thepower hat geschrieben:

Code: Alles auswählen

SELECT DISTINCT "Personen"."ID" AS "ID", "Personen"."Nachname" AS "Nachname", "Personen"."Vorname" AS "Vorname", "Personen"."2. Vorname" AS "2. Vorname", "Personen"."Titel" AS "Titel", "Personen"."Geburtstag" AS "Geburtstag", "Personzusatz"."Namenszusatz" AS "Namenszusatz" FROM "Personen" LEFT JOIN "Personzusatz" ON "Personzusatz"."ID-Zusatz" = "Personen"."Namenszusatz" LEFT JOIN "Persontitel" ON "Persontitel"."Titel" = "Personen"."Titel" ORDER BY "Nachname" ASC, "Vorname" ASC, "Geburtstag" ASC
Es gehören immer zwei betroffene Tabellen zusammen. Zu diesen muss per "ON" die Beziehung geklärt werden; dann kommt die nächste Tabelle und wieder die Klärung durch "ON". Das ist eben anders als wenn durch "FROM" erst einmal alle Tabelle aufgeführt werden und dann die Beziehungen geklärt werden. Werden mit einem Join Beziehungen geklärt, so ist entscheidend, auf welcher Seite der Beziehung die Tabelle steht, von der auf jeden Fall alle Daten gezeigt werden sollen - auch wenn die anderen Tabellen keine entsprechenden Daten enthalten.
In Deiner Abfrage waren alle Tabellen direkt hintereinander aufgeführt. Dazu hatte es einmal eine Bugmeldung gegeben. Ich meinte, dass der Bug behoben wurde. Schreibe doch einmal, mit welcher Version Du den Code erstellt hast.

Gruß

Robert

Re: Mehrere Tabellen in einer Abfrage nutzen

Verfasst: Mo 22. Okt 2012, 17:58
von thepower
Lieber Robert,

werde direkt versuchen deinen Rat auszutesten. Ich benutze LibreOffice 3.5 mit Linux version 3.2.0-32-generic

vielen Dank

Karl

Re: Mehrere Tabellen in einer Abfrage nutzen

Verfasst: Mo 22. Okt 2012, 21:39
von RobertG
Hallo Karl,
thepower hat geschrieben:Ich benutze LibreOffice 3.5 mit Linux version 3.2.0-32-generic
Eigentlich merkwürdig. Ich hatte den Bug hier gemeldet: https://bugs.freedesktop.org/show_bug.cgi?id=42165 , anschließend mit der 3.5.0 wieder getestet und irgendwo gemeint, dass das Gegessen wäre. Jetzt habe ich die verschiedenen Versionen hier noch einmal getestet und kann den Bug nur wieder auf machen.

Gruß

Robert

Re: Mehrere Tabellen in einer Abfrage nutzen

Verfasst: Mo 22. Okt 2012, 23:19
von thepower
Wird irgendwann gelöst werden ;)

Wenn ich den Code von Hand eingebe funtioniert die Abfrage, also sollte ich mich erst mal SQL auseinandersetzen :oops:
Gruß Karl