Mehrteilige Bezeichner konnte nicht gebunden werden

ukulele

Datenbank-Guru
Beiträge
4.394
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:
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
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?
 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.394
Ich musste es doch umstellen und das GROUP BY in den äußeren SELECT packen. Habe auch viel weniger Code aber leider viel zu viel Laufzeit für meine Idee :(

Ich werde diese mal in einem neuen Thread vorstellen.
 
Oben