MS Access:使用多个连接更新语句 [重复]
Posted
技术标签:
【中文标题】MS Access:使用多个连接更新语句 [重复]【英文标题】:MS Access: Update statement with several joins [duplicate] 【发布时间】:2014-10-10 16:57:45 【问题描述】:我正在尝试根据另外两个表(TDCE_NE
和 TDCE_NE_COMP
)更新一个表(DMS_TEST_LOAD
)。知道以下查询有什么问题吗?我不断收到无用的“UPDATE 语句中的语法错误”。访问错误。提前致谢。
UPDATE DMS_TEST_LOAD AS DMS
((INNER JOIN TDCE_NE_COMP AS COMP
ON COMP.[NAME] LIKE DMS.[Trunk Group Number (TGN)] AND COMP.[NE_COMP_TYPE_ID]=421)
INNER JOIN TDCE_NE AS NE ON NE.[ID]=COMP.[NE_ID] AND NE.[NAME]=DMS.[Office])
SET DMS.[Char Parm 1 (Trk Dir)] = COMP.[CHAR_PARM1];
【问题讨论】:
不需要inner join之前的吗? 为什么不直接在 Access“设计视图”中构建它?它会为你写声明。 @iDevlop 因为 Access 将以最简单、最低效的方式开发查询,而我的查询将永远运行。 @user1947544 也许,但它可以是一个很好的起点,并且可以节省时间来构建第一个有效的版本。 【参考方案1】:不太清楚 MS 访问使用什么 SQL 系统。但你可能想试试这个
UPDATE DMS
SET DMS.[Char Parm 1 (Trk Dir)] = COMP.[CHAR_PARM1]
FROM DMS_TEST_LOAD AS DMS
INNER JOIN TDCE_NE_COMP AS COMP
ON COMP.[NAME] LIKE DMS.[Trunk Group Number (TGN)]
AND COMP.[NE_COMP_TYPE_ID]=421
INNER JOIN TDCE_NE AS NE
ON NE.[ID]=COMP.[NE_ID] AND NE.[NAME]=DMS.[Office];
【讨论】:
不走运,@Alex。不幸的是,MS Access 没有这样的直观语法。我相信连接必须在设置 DMS 之前进行。[Char Parm 1 (Trk Dir)]。 在这里找到了一个示例:fmsinc.com/microsoftaccess/query/snytax/… UPDATE tblAddress INNER JOIN tblZipCodes ON [tblAddress].[ZipCode] = [tblZipCodes].[ZipCode] SET [tblAddress].[City] = [tblZipCodes]。 [城市], [tblAddress].[State] = [tblZipCodes].[State] WHERE ([Country] = 'US') 问题可能出在你的喜欢上吗?您需要将一个字符串与另一个字符串进行比较吗? ***.com/questions/14236410/… 我认为类似的声明是问题的一部分。我现在正在尝试正确地制定我的加入声明,但我仍然不断收到同样的错误。作为更新,我使用了所有建议的解决方案(来自 Alex、Rich Andrews 和 Linger),但没有成功;这是相同的语法错误。 可能将字段左侧的like转换成这样的字符串 CStr(DMS.[Trunk Group Number (TGN)]) ?【参考方案2】:这样的事情怎么样...
UPDATE DMS
SET [Char Parm 1 (Trk Dir)] = COMP.[CHAR_PARM1]
FROM DMS_TEST_LOAD DMS
INNER JOIN TDCE_NE_COMP AS COMP
ON COMP.[NAME] LIKE DMS.[Trunk Group Number (TGN)]
AND COMP.[NE_COMP_TYPE_ID]=421
INNER JOIN TDCE_NE AS NE
ON NE.[ID]=COMP.[NE_ID]
AND NE.[NAME]=DMS.[Office]
未测试但已重构为 ANSI92“标准”SQL
并且可以通过...进行测试(无需实际更新 c)
SELECT [Char Parm 1 (Trk Dir)], COMP.[CHAR_PARM1]
FROM DMS_TEST_LOAD DMS
INNER JOIN TDCE_NE_COMP AS COMP
ON COMP.[NAME] LIKE DMS.[Trunk Group Number (TGN)]
AND COMP.[NE_COMP_TYPE_ID]=421
INNER JOIN TDCE_NE AS NE
ON NE.[ID]=COMP.[NE_ID]
AND NE.[NAME]=DMS.[Office]
【讨论】:
【参考方案3】:在 MS Access 中,您必须确保在连接中正确使用括号。我相信您会追求以下目标:
UPDATE DMS
SET DMS.[Char Parm 1 (Trk Dir)] = COMP.CHAR_PARM1
FROM (DMS_TEST_LOAD AS DMS
INNER JOIN TDCE_NE_COMP AS COMP
ON (COMP.NAME = DMS.[Trunk Group Number (TGN)]) AND (COMP.NE_COMP_TYPE_ID = 421))
INNER JOIN TDCE_NE AS NE
ON (NE.Name = DMS.Office) AND (COMP.NE_ID = NE.ID)
请注意,我删除了 LIKE
并将其替换为 =
。您没有使用任何通配符,因此它甚至不能用作LIKE
。如果您想使用LIKE
,您可能正在寻找以下内容:
COMP.NAME LIKE "*" & DMS.[Trunk Group Number (TGN)] & "*"
【讨论】:
以上是关于MS Access:使用多个连接更新语句 [重复]的主要内容,如果未能解决你的问题,请参考以下文章