问题:是否有另一种方法可以在 MS Access 中模拟完全外部连接 -不使用 UNION 或 UNION ALL?
摘要:在 MS Access 中使用 UNION 模拟了完全外连接。但是,两个查询都使用同一个表,只是使用不同的过滤器来形成一组结果,因此不能使用 UNION 连接,因为它只会将查询结果放回查询它们的单个列中。
背景:数据包含来自 100 个组织跨越 7 年的响应。每年不同的组织,每年每个组织的不同响应,75% 的文本响应。
数据结构:组织表;问题表;响应表;链接表通过 ID 链接组织、问题、响应。(内置在 SQL Server 中)
目的:查询与一个问题相关的一组响应,并将该集合与与另一个问题相关的另一组响应进行比较。(结果查询中的行数因查询而异,并且查询必须在不丢失左侧或右侧数据的情况下连接起来)
在 MS Access 中构建前端。
SQL Server 中的编码:
SELECT M.ORG_DESC, M.YEAR, M.RESP_DESC, N.ORG_DESC, N.YEAR, N.RESP_DESC
FROM
(SELECT C.RESP_RANK, C.ORG_DESC, A.YEAR, B.RESP_DESC
FROM LINK A
INNER JOIN RESPONSE B
ON A.RESP_ID = B.RESP_ID
INNER JOIN ORG_LOG C
ON A.ORG_ID = C.ORG_ID
WHERE A.QUESTION_ID = 10840) M
FULL OUTER JOIN
(SELECT C.RESP_RANK, C.ORG_DESC, A.YEAR, B.RESP_DESC
FROM LINK A
INNER JOIN RESPONSE B
ON A.RESP_ID = B.RESP_ID
INNER JOIN ORG_LOG C
ON A.ORG_ID = C.ORG_ID
WHERE A.QUESTION_ID = 10850) N
ON M.RESP_RANK = N.RESP_RANK
想要的结果:
Query1_ORG_DESC Query1_YEAR Query1_RESP_DESC Query2_ORG_DESC Query2_YEAR Query2_RESP_DESC
-------------- ----------- ---------------- --------------- ----------- ----------------
A 2010 Q A 2010 R
NULL NULL NULL A 2011 S
B 2010 T NULL NULL NULL
使用 UNION 时的结果:
Query1_ORG_DESC Query1_YEAR Query1_RESP_DESC
-------------- ----------- ----------------
A 2010 Q /*result from Query1*/
A 2010 R /*result from Query2*/
A 2011 S /*result from Query2*/
B 2010 T /*result from Query1*/