vorweg: Dies ist mein erstes Projekt in LO-Base - entsprechend sind meine Fragen. Der Titel des threads ist vielleicht nicht aussagefähig genug. Daher hier die Problematik ausführlicher:
Ausgangsthematik: Betreuer (Tabelle "RB") betreuen Teilnehmer (Tabelle "TN"). Teilnehmer sind an verschiedenen Standorten und können jeweils bis zu 9 Kurse besuchen/besucht haben. Die Kurse haben neben einer ID noch die Bezeichnung und eine Kurzbezeichnung (u.a.m.). Den Teilnehmern sind über die Betreuer-ID der Betreuer zugewiesen und jeweils über die Kurs-ID die Kurse, an denen er teilnimmt/teilgenommen hat.
Ziel ist es, bei den Betreuern in einem SubForm die zugewiesenen Teilnehmer zu sehen und die Kurse, die sie belegen/belegt haben. Dazu habe ich ein Abfrage an das SubForm gebunden.
Folgender IST-Stand ist erreicht: Im MainForm Betreuer ist das SubForm als Tabelle/Grid eingefügt und es zeigt brav alle dem Betreuer zugeordneten Teilnehmer an. In jeder Zeile zum Teilnehmer stehen auch die dem Teilnehmer zugeordneten Kurs-IDs (bis zu 9 Stück, also 9 Spalten).
SOLL-Stand soll sein, dass im Grid nicht die Kurs-ID angezeigt wird, sondern die Kurzbezeichnung des Kurses. Dazu habe ich die SQL-Anweisung zu meiner im SubForm eingebundenen Abfrage so geändert, dass die Feldabfrage SELECT sich auch auf die Kurs-Tabelle "MN" bezieht. Das funktioniert gut mit dem ersten Kurs - eine Erweiterung auf die weiteren 8 möglichen Kurse (ich habe das vorerst auf die ersten drei beschränkt) funktioniert auch. Dabei habe ich allerdings festgestellt, dass es nötig ist (?wirklich?), sich auf 'Kopien' der Tabelle "MN" zu beziehen ("MN_1" und "MN_2")
Allerdings werden dann die Teilnehmer ("TN"), welche nur einen oder zwei Kurse belegt haben nicht mehr angezeigt, wohl weil die WHERE-Bedingung mit AND verknüpft ist (siehe code-snipped).
Code: Alles auswählen
SELECT "TN"."ID" "ID", "TN"."MDID" "MDID", "TN"."M1ID" || '-' || "MN"."KBez" "M1ID", "TN"."M2ID" || '-' || "MN_1"."KBez" "M2ID", "TN"."M3ID" || '-' || "MN_2"."KBez" "M3ID", "TN"."M4ID" "M4ID", "TN"."M5ID" "M5ID", "TN"."M6ID" "M6ID", "TN"."M7ID" "M7ID", "TN"."M8ID" "M8ID", "TN"."M9ID" "M9ID", "TN"."RBID" "RBID", "TN"."KTID" "KTID", "TN"."geb" "geb", "TN"."Vorn" "Vorn", "TN"."Name" "Name"
FROM "TN", "RB", "MN", "MN" "MN_1", "MN" "MN_2"
WHERE "TN"."RBID" = "RB"."ID" AND "TN"."M1ID" = "MN"."ID" AND "TN"."M2ID" = "MN_1"."ID" AND "TN"."M3ID" = "MN_2"."ID"
Also dachte ich, da gehört jeweils ein OR hin und Klammern. Aber irgendwie - egal was ich tue - es funktioniert mit OR auch nicht.
Es müssen natürlich IMMER alle Teilnehmer des Betreuers angezeigt werden, unabhängig davon, wie viel Kurse sie belegt haben.
Wo steckt mein logischer Fehler? Wie ist der richtige Ansatz?
Danke!
Peter