[gelöst] Abfrage über verschiedene Suchspalten
Moderator: Moderatoren
[gelöst] Abfrage über verschiedene Suchspalten
Hallo,
Ich habe vor einem halben Jahr begonnen eine Ahnendatenbank in OOo Base zu erstellen und habe damals schon sehr viel Hilfe hier im Forum bekommen.
Jetzt bin ich mal wieder dabei,damit weiter zu machen, aber leider komme ich bei einer Abfrage eben nicht mehr weiter.
Ich habe zwei Tabellen:
Tabelle Personen
PersonenID - Name – Geschlecht
1 - Hans Meier – männlich
2 - Paul Meier – männlich
3 - Johann Meier – männlich
4 - Lieschen Müller – weiblich
5 - Ernst Müller – männlich
6 - Elisabeth Bauer – weiblich
7 – Anna Huber – weiblich
Tabelle Familie
FamilienID – EhemannID – EhefrauID
1 - 3 – 4
2 - -
3 - 5 – 6
4 – 5 – 7
Tabelle „Familie“ gibt die Ehen an, also die Zuordnung von Ehemann zu Ehefrau. Nun möchte ich ein Formular erstellen, das mir für jede Person den bzw. die Ehegatten ausgibt. Ich muß also mit der PersonenID aus Tabelle „Personen“ in die Tabelle „Familie“ gehen, dort die ID des Ehegatten und dann damit aus Tabelle „Personen“ wieder den Namen rausholen. Das Ergebnis sollte dann in etwa so aussehen.
Ausgabe:
PersonenID – Name – Ehegatte
3 – Johann Meier – Lieschen Müller
4 – Lieschen Müller – Johann Meier
5 – Ernst Müller – Elisabeth Bauer
5 – Ernst Müller – Anna Huber
6 – Elisabeth Bauer – Ernst Müller
7 – Anna Huber – Ernst Müller
Das Problem ist nun aber, daß die Ausgangsperson ja einmal ein Ehemann und ein anderes Mal eine Ehefrau ist, die Suchspalte in Tabelle „Familie“ also nicht eindeutig definiert ist. Gibt es da irgendeine Möglichkeit trotzdem so eine Abfrage zu erstellen?
Gruß eve
Ich habe vor einem halben Jahr begonnen eine Ahnendatenbank in OOo Base zu erstellen und habe damals schon sehr viel Hilfe hier im Forum bekommen.
Jetzt bin ich mal wieder dabei,damit weiter zu machen, aber leider komme ich bei einer Abfrage eben nicht mehr weiter.
Ich habe zwei Tabellen:
Tabelle Personen
PersonenID - Name – Geschlecht
1 - Hans Meier – männlich
2 - Paul Meier – männlich
3 - Johann Meier – männlich
4 - Lieschen Müller – weiblich
5 - Ernst Müller – männlich
6 - Elisabeth Bauer – weiblich
7 – Anna Huber – weiblich
Tabelle Familie
FamilienID – EhemannID – EhefrauID
1 - 3 – 4
2 - -
3 - 5 – 6
4 – 5 – 7
Tabelle „Familie“ gibt die Ehen an, also die Zuordnung von Ehemann zu Ehefrau. Nun möchte ich ein Formular erstellen, das mir für jede Person den bzw. die Ehegatten ausgibt. Ich muß also mit der PersonenID aus Tabelle „Personen“ in die Tabelle „Familie“ gehen, dort die ID des Ehegatten und dann damit aus Tabelle „Personen“ wieder den Namen rausholen. Das Ergebnis sollte dann in etwa so aussehen.
Ausgabe:
PersonenID – Name – Ehegatte
3 – Johann Meier – Lieschen Müller
4 – Lieschen Müller – Johann Meier
5 – Ernst Müller – Elisabeth Bauer
5 – Ernst Müller – Anna Huber
6 – Elisabeth Bauer – Ernst Müller
7 – Anna Huber – Ernst Müller
Das Problem ist nun aber, daß die Ausgangsperson ja einmal ein Ehemann und ein anderes Mal eine Ehefrau ist, die Suchspalte in Tabelle „Familie“ also nicht eindeutig definiert ist. Gibt es da irgendeine Möglichkeit trotzdem so eine Abfrage zu erstellen?
Gruß eve
Zuletzt geändert von eve am Mi, 06.01.2010 19:56, insgesamt 1-mal geändert.
Re: Abfrage über verschiedene Suchspalten
Hallo eve,
Du hast doch schonmal so eine ähnliche Frage gestellt. So wie hier
viewtopic.php?f=8&t=25218&p=108825#p108825
kannst Du das doch jetzt auch aufziehen, also z.B.
Die Struktur in Deinem erwarteten Ergebnis verwirrt allerdings ein wenig...
Lieschen, Elisabeth und Anna als Ehegatten ..?
Gruß Barlee
Du hast doch schonmal so eine ähnliche Frage gestellt. So wie hier
viewtopic.php?f=8&t=25218&p=108825#p108825
kannst Du das doch jetzt auch aufziehen, also z.B.
Code: Alles auswählen
SELECT
A.FamilienID
,(SELECT b.Name FROM Personen b WHERE b.PersonenID = A.EhemannID) AS Ehemann
,(SELECT b.Name FROM Personen b WHERE b.PersonenID = A.EhefrauID) AS Ehefrau
FROM
Familie A
Lieschen, Elisabeth und Anna als Ehegatten ..?

Gruß Barlee
Re: Abfrage über verschiedene Suchspalten
Hallo Barlee,
Ja, ich kann mich erinnern, und mit Deiner Hilfe damals bin ich auch sehr viel weiter gekommen. Allerdings liegt das Problem hier jetzt etwas anders.
Ich habe den von Dir vorgeschlagenen Code ausprobiert, aber da sieht die Ausgabe so aus:
FamilienID – Ehemann – Ehefrau
Mein endgültiges Ziel ist ein Formular das dann in etwas so aussieht:
PersonenID – Name - Ehepartner
Und das Problem ist nun, daß, abhängig von Geschlecht der Person, der Ehepartner nun einmal in der Spalte EhemannID und ein anderes Mal in der Spalte EhefrauID der Tabelle Familie zu suchen ist, die Suchspalte also nicht eindeutig definiert ist.
Gruß eve
Ja, ich kann mich erinnern, und mit Deiner Hilfe damals bin ich auch sehr viel weiter gekommen. Allerdings liegt das Problem hier jetzt etwas anders.
Ich habe den von Dir vorgeschlagenen Code ausprobiert, aber da sieht die Ausgabe so aus:
FamilienID – Ehemann – Ehefrau
Mein endgültiges Ziel ist ein Formular das dann in etwas so aussieht:
PersonenID – Name - Ehepartner
Und das Problem ist nun, daß, abhängig von Geschlecht der Person, der Ehepartner nun einmal in der Spalte EhemannID und ein anderes Mal in der Spalte EhefrauID der Tabelle Familie zu suchen ist, die Suchspalte also nicht eindeutig definiert ist.
Stimmt, sollte auch Ehepartner heißen.Barlee hat geschrieben:
Die Struktur in Deinem erwarteten Ergebnis verwirrt allerdings ein wenig...
Lieschen, Elisabeth und Anna als Ehegatten ..?![]()

Gruß eve
Re: Abfrage über verschiedene Suchspalten
Schau mal, ob Das hier das gewünschte Ergebnis bringt:
(Alternativ würde statt DISTINCT auch ein GROUP BY aller 3 Spalten funktionieren)
Code: Alles auswählen
SELECT
DISTINCT "A"."PersonenID","A"."Name","B"."Name" AS "Ehegatte"
FROM
"Personen" "A", "Personen" "B", "Familie" "F"
WHERE
("A"."PersonenID" = "F"."EhemannID" AND "B"."PersonenID" = "F"."EhefrauID")
OR
("A"."PersonenID" = "F"."EhefrauID" AND "B"."PersonenID" = "F"."EhemannID")
Re: Abfrage über verschiedene Suchspalten
Funktioniert einwandfrei!
Vielen Dank!
DISTINCT, damit habe ich noch gar nicht gearbeitet, kein Wunder, daß ich das nicht selber hingekriegt habe. Ich seh' schon, ich muß noch viel lernen in SQL.

Vielen Dank!
DISTINCT, damit habe ich noch gar nicht gearbeitet, kein Wunder, daß ich das nicht selber hingekriegt habe. Ich seh' schon, ich muß noch viel lernen in SQL.

Re: [gelöst] Abfrage über verschiedene Suchspalten
Hallo DPunch,
Das Problem ist jetzt zwar gelöst, nachdem ich mir den vorgeschlagenen Code aber etwas genauer angeschaut habe, habe ich jetzt noch eine Verständnisfrage. Schließlich will ich hier ja auch was lernen und nicht nur blind abschreiben.
In dem Code referenzierst Du die Tabelle „Personen“ zwei Mal, einmal über den Alias „A“ und einmal über den Alias „B“. Warum ist es notwendig derselben Tabelle zwei verschiedene Aliasse zu geben?
Gruß eve
Das Problem ist jetzt zwar gelöst, nachdem ich mir den vorgeschlagenen Code aber etwas genauer angeschaut habe, habe ich jetzt noch eine Verständnisfrage. Schließlich will ich hier ja auch was lernen und nicht nur blind abschreiben.
In dem Code referenzierst Du die Tabelle „Personen“ zwei Mal, einmal über den Alias „A“ und einmal über den Alias „B“. Warum ist es notwendig derselben Tabelle zwei verschiedene Aliasse zu geben?
Gruß eve
Re: [gelöst] Abfrage über verschiedene Suchspalten
Weil Du aus der Tabelle Personen zwei unterschiedliche Zeilen benötigst, um das Familienverhältnis Deinen Wünschen entsprechend aufzulösen.
Ganz salopp dahergesagt werden die Zeilen, auf die die Where-Klausel zutrifft, nebeneinander gestellt und die in der Select-Anweisung genannten Spalten als Ergebnis zurückgeliefert.
Rein theoretisch könnte dass dann so aussehen (beide Tabellen über die PersonenID verknüpft)
PersonenID.........Name.............Geschlecht..|.FamilienID....EhemannID....EhefrauID
________________________________________|_______________________________________
3 ...................Johann Meier....männlich.....|.1..............3.................4
Aus diese Zeile kannst Du nur den Namen Johann Meier entnehmen, nicht aber den der Ehefrau.
Mit der 2. Referenzierung kannst Du dann die EhefrauID namentlich auflösen.
Ganz salopp dahergesagt werden die Zeilen, auf die die Where-Klausel zutrifft, nebeneinander gestellt und die in der Select-Anweisung genannten Spalten als Ergebnis zurückgeliefert.
Rein theoretisch könnte dass dann so aussehen (beide Tabellen über die PersonenID verknüpft)
PersonenID.........Name.............Geschlecht..|.FamilienID....EhemannID....EhefrauID
________________________________________|_______________________________________
3 ...................Johann Meier....männlich.....|.1..............3.................4
Aus diese Zeile kannst Du nur den Namen Johann Meier entnehmen, nicht aber den der Ehefrau.
Mit der 2. Referenzierung kannst Du dann die EhefrauID namentlich auflösen.
Re: [gelöst] Abfrage über verschiedene Suchspalten
Ah, jetzt verstehe ich. Diese Art eine Abfrage aufzubauen eröffnet mir ja einige bisher ungeahnte Möglichkeiten.
Vielen Dank für die Hilfe und die Erklärung.
Vielen Dank für die Hilfe und die Erklärung.