我在Access 2003中有三个查询,我需要在一个查询中合并。并非所有三个表都存在所有记录,所以我想我想要一个完整的外连接。
查询1字段:
Record number, surname, firstname, subcentre
查询2字段:
Record number, surname, firstname, case worker
查询3字段:
Record number, surname, firstname, doctor
我需要能够显示:
Record number, surname, firstname, case worker, doctor, subcentre
但是,目前我可以锻炼如何使用左连接,然后使用两个查询之间的右连接联合,但不知道如何将其扩展为三个查询。
有任何想法/建议吗?
答案 0 :(得分: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一样,还有其他类似的方法。以上在一个非常大的文件上会很慢,但除非你有一个不同于Jet / ACE后端的东西,否则你不太可能注意到任何延迟。
比如使用SQL Server后端,您将使用传递查询和t-sql语法。使用MySQL后端,我认为当你超越一个UNION语句时,你有义务使用直通查询。