【发布时间】:2020-01-09 13:15:33
【问题描述】:
我正在尝试对 Access 进行完全外部联接的解决方法。我的代码目前适用于一个表,但是当我尝试嵌套额外的左/右连接时,我收到“3075 语法错误”。我相信 Access 希望我在某处加上引号或括号,但我尝试了几种不同的方法并进行了研究,但似乎无法掌握它。任何帮助,将不胜感激!谢谢你。
SQL = ""
SQL = SQL & "SELECT "
SQL = SQL & " t.* "
SQL = SQL & "FROM "
SQL = SQL & " ( "
SQL = SQL & " SELECT "
SQL = SQL & " [SummaryTbl].[WORK_ITEM_NMB] "
SQL = SQL & " , [SummaryTbl].[PROGRAM] "
SQL = SQL & " , [SummaryTbl].[WORK_ITEM_TYPE] "
SQL = SQL & " , [ParentChildTbl].[HasAssocWI] "
SQL = SQL & " FROM "
SQL = SQL & " SummaryTbl "
SQL = SQL & " LEFT JOIN "
SQL = SQL & " ParentChildTbl "
SQL = SQL & " ON "
SQL = SQL & " [SummaryTbl].
[WORK_ITEM_NMB] = [ParentChildTbl].[WORK_ITEM_NMB] "
SQL = SQL & " LEFT JOIN "
SQL = SQL & " ObjectsAffectedTbl "
SQL = SQL & " ON "
SQL = SQL & " [SummaryTbl].
[WORK_ITEM_NMB] = [ObjectsAffectedTbl].[WORK_ITEM_NMB] "
SQL = SQL & " "
SQL = SQL & " UNION "
SQL = SQL & " "
SQL = SQL & " SELECT "
SQL = SQL & " [ParentChildTbl].
[WORK_ITEM_NMB] "
SQL = SQL & " , [SummaryTbl].[PROGRAM] "
SQL = SQL & " , [SummaryTbl].[WORK_ITEM_TYPE] "
SQL = SQL & " , [ParentChildTbl].[HasAssocWI] "
SQL = SQL & " FROM "
SQL = SQL & " SummaryTbl "
SQL = SQL & " RIGHT JOIN "
SQL = SQL & " ParentChildTbl "
SQL = SQL & " ON "
SQL = SQL & " [SummaryTbl].
[WORK_ITEM_NMB] = [ParentChildTbl].[WORK_ITEM_NMB] "
SQL = SQL & " RIGHT JOIN "
SQL = SQL & " ObjectsAffectedTbl "
SQL = SQL & " ON "
SQL = SQL & " [SummaryTbl].
[WORK_ITEM_NMB] = [ObjectsAffectedTbl].[WORK_ITEM_NMB] "
SQL = SQL & " ) "
SQL = SQL & " t "
SQL = SQL & " WHERE "
SQL = SQL & " t.[WORK_ITEM_NMB] > 700"
Updated:
I added parenthesis as follows:
SQL = SQL & " FROM "
SQL = SQL & " (SummaryTbl "
SQL = SQL & " RIGHT JOIN "
SQL = SQL & " ParentChildTbl "
SQL = SQL & " ON "
SQL = SQL & " [SummaryTbl].
[WORK_ITEM_NMB] = [ParentChildTbl].[WORK_ITEM_NMB]) "
SQL = SQL & " RIGHT JOIN "
SQL = SQL & " ParentChildTbl "
SQL = SQL & " ON "
SQL = SQL & " [ParentChildTbl].
[WORK_ITEM_NMB] = [ObjectsAffectedTbl].[WORK_ITEM_NMB]) "
SQL = SQL & " ) "
我认为这些现在在正确的位置,因为现在我在 Union 子句而不是 From 子句中得到了错误。但我现在不确定如何处理 Union 子句。
【问题讨论】:
-
在 Access 中,对于除返回列之外的任何复杂查询,应使用已保存的查询(该引擎缓存最佳执行计划),而不是动态运行 VBA 字符串查询。
-
不幸的是,我没有那个选项。我确实添加了括号,我认为它在正确的位置,因为现在它告诉我 Union 子句而不是 From 子句有错误。
-
我不明白。所以你没有这个软件,MSACCESS.EXE?您仍然可以在代码中创建存储查询。
-
我必须处理现有的只读数据库。
标签: sql vba ms-access nested-loops dao