Seite 1 von 1

Unterabfrage - verschachteltes SELECT Problem

Verfasst: So, 16.03.2014 00:46
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) 4798 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.

Re: Unterabfrage - verschachteltes SELECT Problem

Verfasst: So, 16.03.2014 06:27
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

Re: Unterabfrage - verschachteltes SELECT Problem

Verfasst: So, 16.03.2014 14:58
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.