1

问题:是否有另一种方法可以在 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*/
4

1 回答 1

1

我很抱歉

解决方案确实是一个 UNION。

我的错误是直接将 UNION与两个查询一起使用。正确的方法是用两个查询创建整个左外查询,然后用这两个查询创建整个右外查询,最后使用UNION(将右查询限制在左查询为空的数据)。

这个链接充分解释了它

https://support.office.com/en-ca/article/Join-tables-and-queries-3f5838bd-24a0-4832-9bc1-07061a1478f6

于 2015-07-23T07:53:39.003 回答