BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Firebird – Ausgabe einer Abfrage bezogen auf eine n:m-Beziehung

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
nehemia
Beiträge: 39
Registriert: Mo 29. Aug 2011, 08:41

Firebird – Ausgabe einer Abfrage bezogen auf eine n:m-Beziehung

Beitrag von nehemia » So 13. Mär 2022, 11:38

Hallo Forum,

da mit Firebird die Funktion CONCAT nicht mehr zur Verfügung steht, stellt sich für mich folgende Herausforderung:

Ich habe drei Tabellen:

1. "t_name", mit den Feldern "id", "famname" "rufname"

2. "t_jtag" (Jahrestag) mit den Feldern "id", "jtagbez" (Jahrestagsbezeichnung, mit den Einträgen Namenstag, Geburtstag, Hochzeit etc.)

3. "t_n_zu_jtag", mit den Feldern "namen_id", "jtag_id", "datum", "MM", "YYYY", "TT".
Ich habe die Felder "datum" (Datumsfeld) und "MM", "TT" und "JJJJ" (Textfelder) beide enthalten wg. der im Moment scheinbar einfacheren Sortiermöglichkeit der Textfelder im Formular und weil das für mich als Grundsatzfrage noch nicht letztendlich geklärt ist, was die bessere Lösung ist. Aber zurück zur Herausforderung…

Alle drei Tabellen sind miteinander verbunden: "t_namen.id" mit "t_n_zu_jtag.namen_id" und "t_jtag.id" mit "t_n_zu_jtag.jtag_id".

Nun möchte ich im Formular den Partner eines Datensatzes ausgeben lassen, was über eine Abfrage "qt_partner" bezogen auf die Tabellen "t_namen", "t_jtag" und "t_n_zu_jtag" in der Form "Familienname, Rufname, Geburtstag" erfolgen soll.

Unter Zuhilfename von CONCAT war dies gut zu lösen, erscheint aber ohne CONCAT wesentlich komplizierter. Wer kann mir hier helfen? Die Datenbank liegt anbei…

Gruß Martin
Dateianhänge
MGDB_220312_Firebird_Testadressen.zip
(283.71 KiB) 81-mal heruntergeladen

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Firebird – Ausgabe einer Abfrage bezogen auf eine n:m-Beziehung

Beitrag von RobertG » So 13. Mär 2022, 15:22

Hallo Martin,

wenn Du eine Datenbank anhängst, die derart viele Formulare und Abfragen hat, dann schreibe doch bitte auf, an welcher Stelle etwas nicht klappt. Da müsste also ein Formular oder eine Abfrage sein, die zur Zeit nicht funktioniert.

Mit CONCAT kann das nichts zu tun haben. CONCAT verbindet in der HSQLDB genau 2 Ausdrücke miteinander. Das habe ich nur in den Anfängen meiner Datenbankversuche mit Base genutzt. Die Verbindung von beliebig vielen Ausdrücken über funktioniert bei beiden Systemen.

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

nehemia
Beiträge: 39
Registriert: Mo 29. Aug 2011, 08:41

Re: Firebird – Ausgabe einer Abfrage bezogen auf eine n:m-Beziehung

Beitrag von nehemia » So 13. Mär 2022, 20:33

Hallo Robert,

ich war der Meinung, dass aus meiner Beschreibung hervorgeht, dass es um eine Abfrage "qt_partner" geht. Ich hab in der übersandten Datenbank rumprobiert. Daher sind darin mehrere Abfragen bei "qt_partner" enthalten, wie überhaupt die Entwicklungsschritte aus der Datenbank ersichtlich sind.

Ich hatte, wie oben bereits gesagt, die Abfrage unter HSQL mit CONCAT gelöst, was einwandfrei funktioniert hat:

Code: Alles auswählen

SELECT CONCAT( CONCAT( CONCAT( CONCAT( CONCAT( CONCAT( "af_partner"."nachname", ' ' ), "af_partner"."vornamen" ), ', geb. ' ), "af_partner"."gebname" ), ', geb. am: ' ), "af_partner"."gebdat" ) "Paperlapapp", "id" FROM "af_partner"
Nun geht es mir um eine entsprechende Lösung ohne CONCAT für Firebird.

Gruß Martin.

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Firebird – Ausgabe einer Abfrage bezogen auf eine n:m-Beziehung

Beitrag von RobertG » So 13. Mär 2022, 21:15

Hallo Martin,

so sähe die Abfrage ohne CONCAT aus:

Code: Alles auswählen

SELECT "af_partner"."nachname"|| ' ' || "af_partner"."vornamen" || ', geb. ' || "af_partner"."gebname" || ', geb. am: ' || "af_partner"."gebdat" AS "Paperlapapp", "id" FROM "af_partner"
Nur finde ich kein "af_Partner" in der vorgegebenen Datenbank. Und mit 3 verschiedenen Tabellen hat das auch nichts zu tun.

Jetzt wäre es doch sinnvoll, die Abfragen zu zeigen, die Du unter HSQLDB formuliert hast. Was Du mit den anderen Abfragen "qt_partner" erreichen willst ist mir unklar. Die letzte der Abfragen krankt ja schon daran, dass da ein Feld drin ist, das in keiner der angegebenen Tabellen vorkommt und dass keine Beziehung zwischen den Tabellen formuliert ist.

Hier die fehlerhafte letzte Abfrage "qt_partner04" korrekt:

Code: Alles auswählen

SELECT "t_namen"."famname" || ', ' || "t_namen"."rufname" || ', ' || "t_jtag"."id" "Familienname, Rufname, geb." 
FROM "t_n_zu_jtag", "t_jtag", "t_namen"
 WHERE "t_n_zu_jtag"."jtag_id" = "t_jtag"."id" AND "t_namen"."id" = "t_n_zu_jtag"."namen_id" 
 ORDER BY "t_namen"."famname" ASC
Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

nehemia
Beiträge: 39
Registriert: Mo 29. Aug 2011, 08:41

Re: Firebird – Ausgabe einer Abfrage bezogen auf eine n:m-Beziehung

Beitrag von nehemia » Mo 14. Mär 2022, 14:35

Hallo Robert,

vermutlich war das ein Mißverständnis. Die Abfrage mit CONCAT hatte ich in eine anderen ähnlichen Datenbank, die nichts mit dieser von mir jetzt zu erstellenden zu tun hat. Die Konstellation war damals, dass die Abfrage "af_partner" sich auf eine einzige Tabelle "t_namen" bezog, die alle diese Felder wie Name, Vorname und auch Geburtstag beinhaltete. Und da hatte ich dann mit CONCAT wie oben dargestellt gearbeitet.

Natürlich macht es einen großen Unterschied, ob die Geburtstagsdaten in der Namenstabelle enthalten sind oder im Rahmen einer n:m-Beziehung ausgelagert und durch eine Zwischentabelle mit der Tabelle "t_namen" verbunden sind, wie das in der jetzigen Datenbank der Fall ist. Deshalb bin ich ja auch nicht weitergekommen.

Vielen Dank für Deinen Abfrageentwurf. Er hat mich in jedem Fall weitergebracht, weil ich meine, jetzt auch verstanden zu haben, wie eine Abfrage bei einer m:n-Beziehung grundsätzlich vonstatten geht. Offensichtlich wird bei "WHERE" einfach die Verknüpfung beschrieben, wie sie auch unter "Extras" → "Beziehungen" bildlich dargestellt ist. Manchmal dauert es eben und plötzlich ist alles klar. Zumindest scheint es im Moment so... :D

Nochmal: Das Ziel war, eine Abfrage zu erhalten in der die Felder für "Familienname", "Rufname" und "Geburtsdatum", zusammen in einem Feld (wie in HSQL mit CONCAT) ausgegeben wird. Ich hab jetzt aufbauend auf Deinem Code noch eine entsprechende Ergänzung vorgenommen. Die Abfrage sieht nun folgendermaßen aus:

Code: Alles auswählen

SELECT "t_namen"."famname" || ', ' || "t_namen"."rufname" || ',  geb. am: ' || "t_n_zu_jtag"."TT" || '.' || "t_n_zu_jtag"."MM" || '.' || "t_n_zu_jtag"."YYYY" "Familienname, Rufname, geb." 
 
 FROM "t_jtag", "t_n_zu_jtag", "t_namen" 

 WHERE "t_jtag"."id" = "t_n_zu_jtag"."jtag_id" AND "t_n_zu_jtag"."namen_id" = "t_namen"."id" 
 
 ORDER BY "t_namen"."famname" ASC
Und nun funktioniert sie auch. Diese Abfrage ist die Grundlage für mein Formular, in dem ich per Listenfeld dann in einem x-beliebigen Datensatz den Partner auswählen können möchte. Die entsprechende Verknüpfung ist aus der Datenbank ersichtlich.

Allerdings ergibt sich jetzt im Zusammenhang mit dieser Abfrage eine weitere grundsätzliche Frage, die nichts mit der Auswahl des Partners zu tun hat:

Die Tabelle "t_jtag" (Jahrestage) beinhaltet ja nicht nur Geburtstage, sondern auch andere Jahrestage. Wenn ich jetzt statt "Geburtsdatum" das Datum für den "Namenstag" oder den "Rentenbeginn" ausgegeben haben möchte, muss ich dies vermutlich irgendwie filtern, weiß aber nicht wo bzw. wie. Kannst Du mir hier auch noch einen Tip geben?

Gruß Martin

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Firebird – Ausgabe einer Abfrage bezogen auf eine n:m-Beziehung

Beitrag von RobertG » Mo 14. Mär 2022, 16:03

Hallo Martin,

nach Deiner Datenbank hat der Geburtstag in der t_jtag die id = 2

Also:

Code: Alles auswählen

…
WHERE "t_jtag"."id" = "t_n_zu_jtag"."jtag_id" 
AND "t_n_zu_jtag"."namen_id" = "t_namen"."id" 
AND "t_jtag"."id" = 2
…
Ich würde so etwas in der Regel mit einer Filtertabelle lösen, in der dann eben diese ID über ein Formular geschrieben wird.

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

nehemia
Beiträge: 39
Registriert: Mo 29. Aug 2011, 08:41

[Gelöst] Re: Firebird – Ausgabe einer Abfrage bezogen auf eine n:m-Beziehung

Beitrag von nehemia » Di 15. Mär 2022, 16:41

Danke, Robert. Ich glaub, ich komm jetzt weiter...

Gruß Martin

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten