【问题标题】:Can I use FULL OUTER JOIN in access VBA?我可以在访问 VBA 中使用 FULL OUTER JOIN 吗?
【发布时间】:2018-05-11 04:45:56
【问题描述】:

我知道我不能在访问查询对象时使用 FULL OUTER JOIN,而是需要 UNION 左连接和右连接。在 VBA 中创建记录集时是否可以避免这种额外的业务,或者 VBA 是否使用相同的 SQL 系统?

例如:

Recordset = CurrentDb.OpenRecordset(_
"SELECT Table1.Field1, Table2.Field2 FROM Table1" & _
"FULL OUTER JOIN Table2 On Table1.Field1 = Table2.Field1")

或者我必须这样做:

Recordset = CurrentDb.OpenRecordset(_
"SELECT Table1.Field1, Table2.Field2 FROM Table1" & _
"LEFT JOIN Table2 On Table1.Field1 = Table2.Field1" & _
"UNION SELECT Table1.Field1, Table2.Field2 FROM Table1" & _
"RIGHT JOIN Table2 On Table1.Field1 = Table2.Field1")

【问题讨论】:

    标签: sql ms-access vba


    【解决方案1】:

    这取决于您尝试连接的数据库。如果您要连接到支持FULL OUTER JOIN 的数据库,那么您可以使用VBA 中的FULL OUTER JOIN

    由于您使用的是CurrentDb.OpenRecordset,因此您使用Access/Jet 数据库引擎进行查询,不支持FULL OUTER JOIN

    如果您的目标是另一个支持 FULL OUTER JOIN 的 RDBMS,那么您可以使用 FULL OUTER JOIN 创建一个传递查询并在该查询上调用 OpenRecordset

    【讨论】:

    • 就可以了。那会比连接慢一点吗?
    • @IsaacReefman 是的,也不是。我假设即使使用此查询,Access 数据库引擎仍然可以使用适当的索引。此外,如果您没有那么多记录,它可能不会有所作为。
    • @IsaacReefman 我刚刚意识到这两个查询不一样。 UNION 方法甚至包括 Table1.JoinField 不是 NULL,但根本不匹配 Table2.JoinField 中的任何内容的情况。
    • 我必须继续学习索引是如何工作的。我很确定我要处理的记录数量很少,就速度而言,但由于我现在才刚刚开始学习这些东西,我想从一开始就尝试学习最佳实践,而不是只需要进一步重新学习。
    • @IsaacReefman 我已经放弃了整个“交叉连接”替代方案;它通常返回与FULL OUTER JOIN 不同的结果。
    猜你喜欢
    • 2013-03-10
    • 2011-08-14
    • 2020-03-03
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 2014-05-22
    • 1970-01-01
    相关资源
    最近更新 更多