/ / Posso mescolare LEFT JOINS e INNER JOINS in Access 2010 SQL? - sql, ms-access, join, ms-access-2010

Posso mescolare LEFT JOINS e INNER JOINS in Access 2010 SQL? - sql, ms-access, join, ms-access-2010

TL; DR: Voglio sapere se è possibile unire i join LEFT e INNER in Access, come i join LEFT (come è da aspettarsi) rallentando significativamente la mia query.

Versione completa: Ieri ero avere un problema che risulta essere stato causato da Access 2010 che non mi piaceva mescolare LEFT e INNER JOINs in una query combinata. Un piccolo riassunto qui:

Avevo tre domande, che desideravo combinare. Ognuna delle query costitutive è stata costruita utilizzando diverse tabelle e join interni.

Ho quindi avuto bisogno di combinare le tre domande. Il Q1 conteneva più risultati di Q2 e Q3 e, in assenza di corrispondenze in Q2 e / o Q3, volevo comunque restituire i risultati di Q1. Allo stesso modo, dove Q2 ha restituito un risultato Q3, non ho voluto restituire risultati nulli piuttosto che risultati nulli, e viceversa.

Tutto ciò ha richiesto una quarta richiesta di partecipazioneQ1, Q2 e Q3 usando LEFT JOINs; ma questo ha causato un errore "identificatore multipart non può essere associato". Questo è stato risolto sostituendo tutti i JOIN INNER nelle query costitutive con LEFT JOINS. Essenzialmente, ho pensato che Q4 avrebbe guardato solo i risultati delle altre query, mentre in realtà stava funzionando tutto in una volta, quindi l'errore.

Quindi, ho risolto l'errore attuale, ma ora lo sonoeseguire quattro query, tutte usando LEFT JOIN. Anche se questo restituisce gli stessi risultati in ognuna delle query costitutive, è molto più lento a causa del modo in cui i join esterni funzionano.

C'è un modo per ottenere la mia combinazioneinterrogare per lavorare come mi aspettavo inizialmente (cioè produrre Q1, Q2 e Q3 usando INNER JOINS per la velocità, poi avere Q4 come trattamento di dati flat quando LEFT si unisce a loro)?

Potrei usare alcuni VBA per rilasciare ciascuna delle query in una tabella temporanea e far guardare a Q4 quelle, ma speravo di fare tutto in SQL. Può essere fatto?

risposte:

1 per risposta № 1

La risposta alla domanda del titolo è: sì, puoi mescolare join esterni e interni:

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

La risposta alla domanda del corpo è: no, non è possibile creare tabelle di join interno e join esterno come se il join interno fosse stato calcolato come join sinistro. Una volta eseguito un join, il risultato è bloccato e assomiglia a un set di dati completamente nuovo.

Se desideri corrispondenze null da Q1 a Q4, devi unire outer Q1 fino a Q4. È così semplice.