/ / Kann ich LEFT JOINS und INNER JOINS in Access 2010 SQL mischen? - sql, ms-access, join, ms-access-2010

Kann ich LEFT JOINS und INNER JOINS in Access 2010 SQL mischen? - SQL, MS-Zugriff, Join, MS-Access-2010

TL; DR: Ich möchte wissen, ob LEFT- und INNER-Joins in Access gemischt werden können, da LEFT-Joins (wie zu erwarten ist) verlangsamt meine Abfrage deutlich.

Vollversion: Gestern war ich ein Problem haben Es stellte sich heraus, dass Access 2010 mich nicht mochte, wenn ich LEFT und INNER JOINs in einer kombinierten Abfrage mischte. Ein kleiner Rückblick hier:

Ich hatte drei Fragen, die ich kombinieren wollte. Jede der konstituierenden Abfragen wurde aus mehreren Tabellen und INNER JOINs erstellt.

Ich musste dann die drei Abfragen kombinieren. Q1 enthielt mehr Ergebnisse als Q2 und Q3. Wenn in Q2 und / oder Q3 keine Übereinstimmungen vorhanden waren, wollte ich immer noch die Ergebnisse aus Q1 zurückgeben. In ähnlicher Weise, in der Q2 ein Ergebnis zurückgegeben hat, das Q3 nicht ergab, wollte ich Null-Ergebnisse und keine Ergebnisse zurückgeben, und umgekehrt.

All dies machte eine vierte Abfrage erforderlichQ1, Q2 und Q3 unter Verwendung von LEFT JOINs; Dies führte jedoch zu einem Fehler "Mehrteilige Kennung kann nicht gebunden werden". Dies wurde gelöst, indem alle INNER JOINs in den konstituierenden Abfragen durch LEFT JOINS ersetzt wurden. Im Wesentlichen ging ich davon aus, dass Q4 nur die Ergebnisse der anderen Abfragen betrachten würde, während es eigentlich alles auf einmal ausarbeitete, daher der Fehler.

Also, ich habe den eigentlichen Fehler gelöst, aber jetzt bin ichAusführen von vier Abfragen, die alle LEFT JOINs verwenden. Obwohl dies in jeder der konstituierenden Abfragen dieselben Ergebnisse liefert, ist es aufgrund der Funktionsweise der äußeren Verknüpfungen viel langsamer.

Gibt es eine Möglichkeit, wie ich meine Kombination bekommen kann?Abfrage, um so zu arbeiten, wie ich ursprünglich erwartet hatte (d. h. Q1, Q2 und Q3 unter Verwendung von INNER JOINS für die Geschwindigkeit erzeugen, dann lassen Q4 sie als flache Daten behandeln, wenn LEFT JOINING sie verbindet)?

Ich könnte etwas VBA verwenden, um jede der Abfragen in eine temporäre Tabelle zu löschen und Q4 darauf untersuchen zu lassen, aber ich hatte gehofft, alles in SQL zu erledigen. Kann das gemacht werden?

Antworten:

1 für die Antwort № 1

Die Antwort auf die Titelfrage lautet: Ja, Sie können äußere und innere Verknüpfungen mischen:

SELECT
A.X,
B.Y,
C.Z
FROM
A RIGHT JOIN (
B INNER JOIN (
C LEFT JOIN (
D
) ON C.DID = D.ID
) ON B.CID = C.ID
) ON A.BID = B.ID

Die Antwort auf die Körperfrage lautet: Nein, Sie können keine inneren Join-Tabellen erstellen, und das äußere Joining-Ergebnis so, als wäre der innere Join als linker Join berechnet worden. Sobald ein Join ausgeführt wird, ist das Ergebnis gesperrt und ähnelt einem ganzen neuen Datensatz.

Wenn Sie NULL-Übereinstimmungen von Q1 bis Q4 wünschen, müssen Sie Q1 bis Q4 umschließen. So einfach ist das.