我正在从tblimport记录更新tblmain记录。tblimport上的数据需要从其他表中提取引用,以匹配tblmain上的实际预期记录。其他表是tblemployees和tbltaxrates。我们试着通过sql查询来实现,但似乎不能完全正确地进行查询。我们都不知道如何正确地构造这个,因为帮助我的人是webdev,使用mysql,他的查询与msaccess所期望的不太一样。
tblimport上导入的数据与tblmain的信息不完全相同,因此必须引用tbleemployees和tbltaxrates才能找到匹配的信息,例如:
tblimport有[empid],它相当于tbleemployees上的[seqnumid],在这里我们需要提取tblmain中需要的[employee name]。
同样,tblimport只有[taxregion],但我们需要将其与tbltaxrates上相应的[gst percent]、[pst percent]、[hst percent]和[iscompound]对齐,tbltaxrates是tblmain所需的。
下面是我们写的:
' Update Main Entry Table from Imported Content
DoCmd.RunSQL "UPDATE tblMAIN t " & _
"INNER JOIN tblIMPORT x ON x.[IsDeleted] IS NULL AND x.[EntryID] = t.[EntryID] " & _
"LEFT JOIN tblEMPLOYEES e ON x.[EmpID] = e.[SeqNumID] " & _
"LEFT JOIN tblTAXRATES r ON x.[TaxRegion] = r.[TaxRegion] " & _
"SET t.[Employee Name] = e.[Employee Name],t.[TaxRegion] = x.[TaxRegion],t.[EntryID] = x.[EntryID],t.[EntryDate] = x.[EntryDate],t.[GST percent] = r.[GST percent],t.[PST percent] = r.[PST percent],t.[HST percent] = r.[HST percent],t.[IsCompound] = r.[IsCompound];"
2条答案
按热度按时间xv8emn3q1#
对于我在这里读到的内容,您很可能需要不止一个查询,因此我强烈建议您不要创建一个大型更新查询,而是执行以下操作
1-)使用tblimport中的数据创建一个select查询,并将所有表都连接到那里。2-)将步骤#1中的数据插入tblmain 3-)在tblmain中运行更新查询,并与需要添加信息的任何其他表合并。
它将简化过程并帮助你组织你的想法。到最后,您很可能能够将上述3个步骤放在1或2个查询中,但开始时很简单。
brtdzjyr2#
实际上,msaccess和mysql可能只是两个主要的rdbms,它们共享相同的支持
UPDATE...JOIN
(与其他支持UPDATE...FROM
像sql server和postgres或者UPDATE
使用子查询(如oracle、db2和sqlite)。然而,ms-access要求新用户使用令人沮丧的特性,将连接括在括号中,括号中有多个连接
JOIN
已使用。还有一些ON
子句表达式可能需要在中运行WHERE
就像IS NULL
. 希望access团队在一个建议的、未来的版本中对其进行修改,使之符合ansi-1992。因此,只需调整查询即可。还可以考虑将sql保存为存储查询,并在vba中使用
DoCmd.OpenQuery
由于各种原因:1)语法错误的查询无法保存;2) 编译器保存了最佳的执行计划,以便有效地运行复杂的查询,例如多个连接;3)避免vba中引用字符串的串联。sql(另存为新查询对象)
vba(无需关闭操作查询)