SQL-Unterabfrage mit LEFT JOIN verursacht ungültigen objecterrors

Ich habe eine Abfrage mit der folgenden Struktur:

EDIT Originalstruktur der Abfrage war nicht ganz repräsentativ.

SELECT A ,B ,C ,D FROM ( SELECT id,A FROM myTable WHERE conditions GROUP BY id,A) MainQuery LEFT JOIN (SELECT id, B, C FROM myView WHERE id IN ( SELECT DISTINCT id FROM MainQuery ) ) sub1 ON sub1.B = MainQuery.A LEFT JOIN (SELECT MainQuery.id, D FROM myOtherView WHERE sub1.id IN ( SELECT DISTINCT id FROM MainQuery ) ) sub2 ON sub2.D = sub1.C 

Wenn ich die Abfrage ausführen, bekomme ich die Fehlermeldung Invalid object name 'MainQuery'. Wenn ich die LEFT JOINs und die Felder, die sie in die SELECT statement LEFT JOINs kommentiert, läuft die Abfrage ganz gut. Ich habe auch versucht AS MainQuery , aber ich bekomme das gleiche Ergebnis.

Ich vermute, es hat etwas mit scope zu tun. Wo versuche ich, SELECT DISTINCT id FROM MainQuery , ist MainQuery außerhalb des Gültigkeitsbereichs für die WHERE Unterabfrage innerhalb von sub1 ?

Für den Kontext wurde ich mit dem Umschreiben einer Abfrage beauftragt, die Temp-Tabellen in eine Abfrage verwendet hat, die in einem Bericht verwendet werden kann, der auf SSRS 2000 MainQuery wird. Meine MainQuery , sub1 und sub2 waren sub2 Tabellen in der ursprünglichen Abfrage. Diese temp-Tabellen verwendeten Unterabfragen in ihnen, die ich in meiner Übersetzung bewahrt habe. Aber die ursprüngliche Abfrage hatte den Vorteil, jede Temp-Tabelle separat zu erstellen und dann die Ergebnisse zu verbinden. Temp Tische und Unterabfragen sind neu für mich, also bin ich mir nicht sicher, wie man sich zwischen den beiden anpasst, oder wenn das sogar der richtige Ansatz ist.

    Die SQL für Ihre MainQuery ist ungültig. Führen Sie es selbst aus und sehen Sie:

     SELECT A, id FROM myTable WHERE conditions GROUP BY A 

    Sie können A und ID nicht auswählen, sondern nur Gruppe von A. Entweder müssen Sie auch gruppieren nach id oder wickeln Sie die ID in einer aggregierten function wie min oder max ein.

    Mit dem angesprochenen sieht es aus wie deine andere Frage ist, dass du "LINKS JOIN" sagst, aber dann stelle die Spalte deines LINKS JOINED-Tafels auf die linke Seite deiner where-Klausel. Siehe unten, wo ich Flip sub1.B und MainQuery.A in der JOIN.

     SELECT A ,B ,C ,D FROM ( SELECT A, id FROM myTable WHERE conditions GROUP BY A,id) MainQuery LEFT JOIN nutherTable sub1 on MainQuery.A = sub1.B and MainQuery.id = sub1.id LEFT JOIN (SELECT D ...) sub2 ON sub1.C = sub2.D