2012-06-24 5 views
3

У меня три запроса в Access 2003, которые мне нужно объединить в одном запросе. Не все записи существуют на всех трех таблицах, поэтому я предполагаю, что хочу что-то вроде полного внешнего соединения.Объединить три таблицы в MS Access 2003

Запрос 1 Поля: Record number, surname, firstname, subcentre

Запрос 2 поля: Record number, surname, firstname, case worker

Query 3 поля: Record number, surname, firstname, doctor

Мне нужно, чтобы иметь возможность отображения:

Record number, surname, firstname, case worker, doctor, subcentre

Однако на данный момент я могу тренироваться, как использовать левое соединение, а затем объединение с правильным соединением между двумя запросами, но не знаю, как расширить это до трех запросов.

Любые идеи/предложения?

ответ

3

Как насчет:

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] 

Использование UNION вместо UNION ALL в запросе создает уникальный список [Record number], surname, first name взятый из всех трех таблиц. Затем производную таблицу можно использовать для LEFT JOIN для других трех таблиц. LEFT JOIN обеспечивает включение всех записей из производных таблиц.

Как обычно в SQL, существуют и другие аналогичные способы для этого. Вышеуказанное будет медленным в очень большом файле, но если у вас нет чего-то другого, кроме back-end Jet/ACE, маловероятно, что вы заметите какую-либо задержку.

С помощью, скажем, серверного сервера SQL Server, вы должны использовать сквозной запрос и синтаксис t-sql. С MySQL-back-end я думаю, что вы обязаны использовать транзитный запрос, когда вы выходите за один оператор UNION.

Смежные вопросы