ukulele
Datenbank-Guru
- Beiträge
- 5.306
Ich stehe vor einem Problem und habe etwas den Überblick verloren. Ich versuche es mal anhand einer simplen n:m Beziehung zu erklären, der eigentliche SELECT umfasst mitlerweile 95 Zeilen und läuft mithilfe einer Variable, was mich daran hindert eine schöne Sicht daraus zu formen die mir gleich für alle Datensätze meiner Tabelle (nicht nur für den mit der ID der Variablen) die entsprechenden Informationen liefert. Aber der Reihe nach:
Beispiel:
Es existieren 2 Tabellen (Adressen und Personen) die per n:m Beziehung verknüpft sind, also mit einer Zwischentabelle. Ich kann folgende Abfrage natürlich problemlos laufen lassen:
Ich muss die Abfrage aber umstellen und erweitern, was prinzipiell auch geht:
Der Umbau erfolgt einzig aus dem Grund das ein GROUP BY genutzt werden soll um die Anzahl der Verknüpfungen weiter zu reichen:
Um das gewünschte Ergebniss zu erzielen möchte ich mich aber innerhalb des 2ten SELECTs noch einer Prüfung auf eine Spalte des ersten SELECTs beziehen, z.B.:
Das ruft einen Fehler hervor (Mehrteilige Bezeichner konnte nicht gebunden werden) weil a.SID_ADRESSEN eben nur in der anderen Abfrage vorkommt. Ich würde die beiden ja auch gerne kombinieren aber aus meiner Sicht geht das nicht aufgrund von GROUP BY etc., vieleicht scheitere ich aber einfach am Umfang der original Abfrage
Weiss jemand einen Workarround?
Beispiel:
Es existieren 2 Tabellen (Adressen und Personen) die per n:m Beziehung verknüpft sind, also mit einer Zwischentabelle. Ich kann folgende Abfrage natürlich problemlos laufen lassen:
Code:
SELECT *
FROM ADRESSEN a,
z_zwischentabelle z,
PERSONEN p
WHERE a.SID_ADRESSEN = z.SID_ADRESSEN
AND z.SID_PERSONEN = p.SID_PERSONEN
Ich muss die Abfrage aber umstellen und erweitern, was prinzipiell auch geht:
Code:
SELECT *
FROM ADRESSEN a,
( SELECT *
FROM zwischentabelle z,
PERSONEN p
WHERE z.SID_PERSONEN = p.SID_PERSONEN ) z
WHERE a.SID_ADRESSEN = z.SID_ADRESSEN
Der Umbau erfolgt einzig aus dem Grund das ein GROUP BY genutzt werden soll um die Anzahl der Verknüpfungen weiter zu reichen:
Code:
SELECT *
FROM ADRESSEN a,
( SELECT z.SID_ADRESSEN,
count(*) AS Anzahl
FROM zwischentabelle z,
PERSONEN p
WHERE z.SID_PERSONEN = p.SID_PERSONEN
GROUP BY z.SID_ADRESSEN ) z
WHERE a.SID_ADRESSEN = z.SID_ADRESSEN
Um das gewünschte Ergebniss zu erzielen möchte ich mich aber innerhalb des 2ten SELECTs noch einer Prüfung auf eine Spalte des ersten SELECTs beziehen, z.B.:
Code:
SELECT *
FROM ADRESSEN a,
( SELECT z.jperson_fk,
count(*) AS Anzahl
FROM z_jperson_nperson z,
PERSONEN p
WHERE z.nperson_fk = p.SID_PERSONEN
AND z.jperson_fk = a.SID_ADRESSEN
GROUP BY z.jperson_fk ) z
WHERE a.SID_ADRESSEN = z.jperson_fk
Weiss jemand einen Workarround?