Combineer drie tabellen in MS Access 2003

Ik heb drie vragen in Access 2003 die ik in de ene query moet combineren. Niet alle records bestaan ​​op alle drie de tafels, dus ik veronderstel dat ik iets als een volledige outer join wil.

Query 1 Fields: Record number, surname, firstname, subcentre

Query 2 Fields: Record number, surname, firstname, case worker

Query 3 Fields: Record number, surname, firstname, doctor

Ik moet kunnen weergeven:

Recordnummer, achternaam, voornaam, case worker, arts, subcentrum

Op dit moment kan ik echter trainen hoe ik een linkse join dan union gebruik, met een juiste join tussen twee query's, maar ik weet niet hoe ik dit moet uitbreiden naar drie query's.

Eventuele ideeën/suggesties?

3

1 antwoord

Wat dacht je van:

SELECT a.[Record number], a.surname, a.firstname, 
       t1.subcentre, t2.[case worker], t3.doctor
FROM
(((SELECT [Record number], surname, firstname FROM T1
UNION
SELECT [Record number], surname, firstname FROM T2
UNION
SELECT [Record number], surname, firstname FROM T3) As A
LEFT JOIN T1 ON A.[Record number]=T1.[Record number])
LEFT JOIN T2 ON A.[Record number]=T2.[Record number])
LEFT JOIN T3 ON A.[Record number]=T3.[Record number]

Het gebruik van UNION in plaats van UNION ALL in de query creëert een unieke lijst met [Recordnummer], achternaam, voornaam uit alle drie de tabellen. De afgeleide tabel kan vervolgens worden gebruikt om naar de andere drie tabellen te linken. LEFT JOIN zorgt ervoor dat alle records van de afgeleide tabellen worden opgenomen.

Zoals gebruikelijk bij SQL zijn er andere, vergelijkbare manieren om dit te doen. Het bovenstaande zou traag zijn op een zeer groot bestand, maar tenzij u iets anders dan een Jet/ACE-back-end hebt, is het onwaarschijnlijk dat u enige vertraging zult opmerken.

Met bijvoorbeeld een back-end van SQL Server zou u een pass-through-query en t-sql-syntaxis gebruiken. Met MySQL back-end, denk ik dat je verplicht bent om een ​​passthrough-query te gebruiken als je boven die ene UNION-verklaring gaat.

3
toegevoegd