Sql 我可以在access VBA中使用完全外部联接吗?

Sql 我可以在access VBA中使用完全外部联接吗?,sql,ms-access,vba,Sql,Ms Access,Vba,我知道我不能在access查询对象中使用完整的外部联接,而是需要联合左联接和右联接。在VBA中创建记录集时,我是否可以避免这一额外的业务,或者VBA是否使用相同的SQL系统 例如: Recordset = CurrentDb.OpenRecordset(_ "SELECT Table1.Field1, Table2.Field2 FROM Table1" & _ "FULL OUTER JOIN Table2 On Table1.Field1 = Table2.Field1") 或者我

我知道我不能在access查询对象中使用完整的外部联接,而是需要联合左联接和右联接。在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")

这取决于您试图连接到哪个数据库。如果要连接到支持
完全外部联接的数据库
,则可以使用VBA中的
完全外部联接

由于您使用的是
CurrentDb.OpenRecordset
,因此您使用的是Access/Jet数据库引擎,不支持
完全外部联接


如果您的目标是另一个支持
完全外部连接的RDBMS
,那么您可以使用
完全外部连接创建一个直通查询,并对该查询调用
OpenRecordset

这取决于您尝试连接到的数据库。如果要连接到支持
完全外部联接的数据库
,则可以使用VBA中的
完全外部联接

由于您使用的是
CurrentDb.OpenRecordset
,因此您使用的是Access/Jet数据库引擎,不支持
完全外部联接


如果您的目标是另一个支持
完全外部连接的RDBMS
,那么您可以使用
完全外部连接创建一个传递查询,并在该查询上调用
OpenRecordset

就可以了。但这会比连接慢一点吗?@IsaacReefman是和否。我假设Access数据库引擎即使使用此查询也可以使用适当的索引。另外,如果你没有那么多记录,可能也没什么不同。@IsaacReefman我刚刚意识到这两个查询是不一样的。
UNION
方法甚至包括
Table1.JoinField
不是
NULL
,但与
Table2.JoinField
中的任何内容都不匹配的情况。我必须不断了解索引的工作原理。我敢肯定,就速度而言,我要处理的记录数量很少,但由于我现在才开始学习这些东西,我想从一开始就尝试学习最佳实践,而不仅仅是再进一步学习。@IsaacReefman我放弃了整个“交叉连接”选项;它通常返回与
完全外部联接不同的结果。这样就可以了。但这会比连接慢一点吗?@IsaacReefman是和否。我假设Access数据库引擎即使使用此查询也可以使用适当的索引。另外,如果你没有那么多记录,可能也没什么不同。@IsaacReefman我刚刚意识到这两个查询是不一样的。
UNION
方法甚至包括
Table1.JoinField
不是
NULL
,但与
Table2.JoinField
中的任何内容都不匹配的情况。我必须不断了解索引的工作原理。我敢肯定,就速度而言,我要处理的记录数量很少,但由于我现在才开始学习这些东西,我想从一开始就尝试学习最佳实践,而不仅仅是再进一步学习。@IsaacReefman我放弃了整个“交叉连接”选项;它通常返回与
完全外部联接不同的结果。