/ / Czy mogę połączyć LEWE POŁĄCZENIA i WEWNĘTRZNE POŁĄCZENIA w programie Access 2010 SQL? - sql, ms-access, join, ms-access-2010

Czy mogę mieszać LEWE POŁĄCZENIA i JUŻE WEWNĘTRZNE w SQL Access Access 2010? - sql, ms-access, join, ms-access-2010

TL; DR: Chcę wiedzieć, czy możliwe jest łączenie połączeń LEFT i INNER w programie Access, ponieważ połączenia LEFT sąjak można się spodziewać) znacznie spowalnia moje zapytanie.

Pełna wersja: Wczoraj byłem problem okazało się, że przyczyną tego był program Access 2010, który nie lubił mieszać LEFT i INNER JOIN w połączeniu. Trochę podsumowania tutaj:

Miałem trzy pytania, które chciałem połączyć. Każde z zapytań składowych zostało zbudowane przy użyciu kilku tabel i INNER JOIN.

Następnie musiałem połączyć trzy zapytania. Pierwszy kwartał zawierał więcej wyników niż w drugim i trzecim kwartale, a tam, gdzie nie było meczów w drugim i trzecim kwartale, nadal chciałem zwrócić wyniki z pierwszego kwartału. Podobnie, gdy Q2 zwróciło wynik Q3, nie chciałem zwracać wyników pustych, a nie wyników i odwrotnie.

Wszystko to wymagało czwartego dołączenia zapytaniaQ1, Q2 i Q3 przy użyciu LEFT JOIN; ale spowodowało to błąd „identyfikator wieloczęściowy nie może być związany”. Rozwiązano to przez zastąpienie wszystkich INNER JOIN w zapytaniach składowych LEFT JOINS. Zasadniczo założyłem, że Q4 będzie wyglądał tylko na wyniki innych zapytań, podczas gdy w rzeczywistości wszystko to działa od razu, stąd błąd.

Więc, rozwiązałem rzeczywisty błąd, ale teraz jestemuruchomienie czterech zapytań, wszystkie przy użyciu LEFT JOIN. Mimo że zwraca to te same wyniki w każdym z zapytań składowych, jest znacznie wolniejsze ze względu na sposób łączenia zewnętrznych.

Czy jest jakiś sposób, żeby dostać moją kombinacjęzapytanie działa tak, jak pierwotnie oczekiwałem (tj. aby produkować Q1, Q2 i Q3 przy użyciu INNER JOINS dla prędkości, to czy Q4 traktuje je jako dane płaskie po LEWYM DOŁĄCZENIU do nich)?

Mógłbym użyć niektórych VBA, aby upuścić każde z zapytań do tymczasowej tabeli i spojrzeć na nie w Q4, ale miałem nadzieję, że zrobię to wszystko w SQL. Czy można to zrobić?

Odpowiedzi:

1 dla odpowiedzi № 1

Odpowiedź na pytanie tytułowe brzmi: tak, możesz mieszać zewnętrzne i wewnętrzne połączenia:

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

Odpowiedź na pytanie o ciało brzmi: nie, nie można łączyć tabel wewnętrznych, a sprzężenie zewnętrzne powoduje, że sprzężenie wewnętrzne byłoby obliczone jako łączenie lewe. Po wykonaniu połączenia wynik jest zablokowany i przypomina cały nowy zestaw danych.

Jeśli chcesz dopasowań zerowych od Q1 do Q4, musisz dołączyć zewnętrzne Q1 do Q4. To takie proste.