【问题标题】:MS Access - Full Outer Join with 3 Tables [duplicate]MS Access - 具有 3 个表的完全外部联接 [重复]
【发布时间】:2014-08-21 00:45:46
【问题描述】:

我正在尝试对 3 个表进行完整的外部联接,并且从 here 执行两表 FOJ 的逻辑不可行

因此,我没有对 3 个查询进行 UNION(就像我对两个表做的那样),而是进行了 7 个查询来进行联合。我敢肯定这确实效率低下,但这是我第一次使用 Access。

基本上,我有一张表格,其中包含有关实际花费的美元的信息。详细说明他们的花费(数字 ID)、提供者(数字代码)以及接收者(不同的数字代码)。其他两张表有类似的规格,但一张显示了预计将花费的费用,另一张显示了最初预算要花费的费用。

我能够进行两张表的 FOJ 并获得准确的数字,但我在进行三向 FOJ 时遇到了麻烦。

在实际表中,对于特定的 ID、提供者代码和接收者代码,可能有 3 条花费的美元记录,而在预测表中,可能有 2 条记录,而在预算表中, 1. 本质上不能保证对于 Number ID、provider code、receiver code 的每一个组合在三个表中的记录数都是相同的。

为了确保记录不会相乘,我分别查询了 3 个表并执行了 Group By 函数。我提出的 7 个查询如下:

表 1: 带预测的实际内部联接和带 B 的内部联接

表 2: F 内连接带 B 和 F 左外连接带 A(其中 A 为 Null)

表 3: F 内连接 w/ A 和 F 左外连接 w/ B(其中 B 为 Null)

表 4: B 内连接 w/ A 和 B 左外连接 w/ F(其中 F 为 Null)

表 5: 带 B 的左外连接(其中 B 为 Null)和带 F 的左外连接(其中 F 为空)

表 6: B 左外连接 w/ A(其中 A 为 Null)和 B 左外连接 w/ F(其中 F 为空)

表 7: F 左外连接 w/B(其中 B 为 Null)和 F 左外连接 w/A(其中 A 为空)

有人可以告诉我如何进行 3-Table 全外部联接吗?有没有我缺少的组合? 不幸的是,我不能发布表格或给出太多规范,因为我不允许这样做。我自己也无法更改表,我基本上只有只读权限。

【问题讨论】:

    标签: sql database ms-access ms-access-2007


    【解决方案1】:

    您可以使用unionleft outer joins 的序列。我认为 3 可以,但您可能需要 6。这是 SQL 的草图:

    select *
    from A left outer join B left outer join C
    union
    select *
    from B left outer join C left outer join A
    union
    select *
    from C left outer join A left outer join B;
    

    根据条件,您可能需要扩展它:

    select *
    from A left outer join B left outer join C
    union
    select *
    from B left outer join C left outer join A
    union
    select *
    from C left outer join A left outer join B
    union
    select *
    from A left outer join C left outer join B
    union
    select *
    from B left outer join A left outer join C
    union
    select *
    from C left outer join B left outer join A;
    

    但是,这两个想法似乎都非常糟糕。相反,只需使用所有三个表的 id 创建一个临时表:

    select id into ids
    from A
    union 
    select id
    from b
    union
    select id
    from c;
    

    然后使用left outer join:

    select *
    from ids left join A left join B left join C;
    

    或者,更好。升级到支持更强大 SQL 功能的数据库,例如 SQL Server Express(也是免费的)。

    【讨论】:

    • 澄清一下,在 MS Access A 左外连接 B 左外连接 C 的设计视图中,将如下所示: A --> B --> C ?不幸的是,另一个限制是表上没有 ID,我无法添加它们。我将研究 SQL Server Express,它是否具有完全外连接功能?
    • @user3783314 。 . .它不仅支持full outer join,还可以在子查询中使用unions,它支持CTE。后者对于此类查询也很有帮助。
    • 另外,你为什么说它们是坏主意?我的意思是显然有更好的方法来做我正在做的事情,但考虑到我所面临的限制,我只是想了解执行您建议的解决方案的好坏(如果我只能使用 Access)
    • @user3783314 。 . .这些配方做了很多不必要的工作(因此是“坏主意”)。他们将解决 MS Access 中非常繁琐的限制,这比我所知道的任何其他数据库都远离标准 SQL。最好使用在支持 SQL 方面做得更好的数据库。当然,如果你不能,你就不能。
    猜你喜欢
    • 1970-01-01
    • 2011-11-02
    • 2017-08-04
    • 1970-01-01
    • 2014-12-18
    • 2014-08-07
    • 1970-01-01
    • 2015-10-12
    • 2011-07-26
    相关资源
    最近更新 更多