Unterabfrage - verschachteltes SELECT Problem

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

buchenkauz
Beiträge: 2
Registriert: Sa, 15.03.2014 23:20

Unterabfrage - verschachteltes SELECT Problem

Beitrag von buchenkauz »

Hallo,

in einer Datenbank für eine Kursverwaltung unter OOo Base 4.0.1 habe ich folgende Beziehungen zwischen den Tabellen:
Beziehungen
Beziehungen
Beziehungen-buchenkauz.png (39.03 KiB) 4799 mal betrachtet
Ich brauche nun eure Hilfe, weil ich es nicht schaffe, in einer Abfrage Vorname und Name der Dozenten und der Kursteilnehmer anzuzeigen. Die Abfrage läuft über die Modulbelegung als Haupttabelle.
Vorname und Name aus der Adressentabelle sollen ja zweimal abgefragt werden. Einmal für die Kursteilnehmer über die direkte Beziehung Modulbelegung - Adressen und ein zweites Mal indirekt von Modulbelegung über Module - Dozenten - Adressen.
In der von mir angelegten Abfrage sind die Felder für die Dozenten aber leer:

Code: Alles auswählen

SELECT 
	"Module"."Modulnr" || ' - ' || "Module"."Modulname" AS "Kurs", 
	"Adressen"."Vorname" || ' ' || "Adressen"."Nachname" AS "Name", 
	( SELECT 
		"Adressen"."Vorname" || ' ' || "Adressen"."Nachname" 
	FROM "Modulbelegung" 
		LEFT JOIN "Module" 
			ON "Modulbelegung"."IDModuletab" = "Module"."ModuleID" 
		LEFT JOIN "Dozenten" 
			ON "Module"."IDDozentenTab" = "Dozenten"."DozentenID" 
		LEFT JOIN "Adressen" 
			ON "Dozenten"."IDAdressetab" = "Adressen"."AdressID" 
	WHERE "Modulbelegung"."IDModuletab" = "Module"."ModuleID" 
		AND "Module"."IDDozentenTab" = "Dozenten"."DozentenID" 
		AND "Dozenten"."IDAdressetab" = "Adressen"."AdressID" ) 
	AS "Dozent" 
FROM "Modulbelegung" 
	LEFT JOIN "Adressen" 
		ON "Modulbelegung"."IDAdressentab" = "Adressen"."AdressID" 
	LEFT JOIN "Module" 
		ON "Modulbelegung"."IDModuletab" = "Module"."ModuleID"
Wenn ich das WHERE in der SELECT Unterabfrage weglasse, wird der Fehler
Single value expected in statement
angezeigt.
Geht überhaupt was ich gern hätte?
Vielen Dank im voraus.
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Unterabfrage - verschachteltes SELECT Problem

Beitrag von F3K Total »

Hi,
ja das geht:

Code: Alles auswählen

SELECT 
    "Module"."Modulnr" || ' - ' || "Module"."Modulname" AS "Kurs", 
    "Adressen"."Vorname" || ' ' || "Adressen"."Nachname" AS "Name", 
    "Adressen_Dozenten"."Vorname" || ' ' || "Adressen_Dozenten"."Nachname" AS "Dozent" 
FROM 
    "Modulbelegung", 
    "Adressen", 
    "Module", 
    "Dozenten", 
    "Adressen" AS "Adressen_Dozenten" 
WHERE "Modulbelegung"."IDAdressentab" = "Adressen"."AdressID" 
AND "Modulbelegung"."IDModuletab" = "Module"."ModuleID" 
AND "Module"."IDDozentenTab" = "Dozenten"."DozentenID" 
AND "Dozenten"."IDAdressetab" = "Adressen_Dozenten"."AdressID" 
ORDER BY "Kurs"
Gruß R
buchenkauz
Beiträge: 2
Registriert: Sa, 15.03.2014 23:20

Re: Unterabfrage - verschachteltes SELECT Problem

Beitrag von buchenkauz »

Hallo F3K Total,

danke für die schnelle Antwort und die Lösung meines Problem. Der Ansatz mit den Alias funktioniert sehr gut - auch mit JOIN's:

Code: Alles auswählen

SELECT 
	"Module"."Modulnr" || ' - ' || "Module"."Modulname" AS "Kurs", 
	"Adressen"."Vorname" || ' ' || "Adressen"."Nachname" AS "Name", 
	"Adressen_Dozenten"."Vorname" || ' ' || "Adressen_Dozenten"."Nachname" AS "Dozent" 
FROM "Modulbelegung" 
	LEFT JOIN "Adressen" 
		ON "Modulbelegung"."IDAdressentab" = "Adressen"."AdressID"
	LEFT JOIN "Module" 
		ON "Modulbelegung"."IDModuletab" = "Module"."ModuleID"
	LEFT JOIN "Dozenten" 
		ON "Module"."IDDozentenTab" = "Dozenten"."DozentenID"
	LEFT JOIN "Adressen" AS "Adressen_Dozenten" 
		ON "Dozenten"."IDAdressetab" = "Adressen_Dozenten"."AdressID"
ORDER BY "Kurs"
Vielen Dank.
Antworten