MS Access:使用多个连接更新语句 [重复]

Posted

技术标签:

【中文标题】MS Access:使用多个连接更新语句 [重复]【英文标题】:MS Access: Update statement with several joins [duplicate] 【发布时间】:2014-10-10 16:57:45 【问题描述】:

我正在尝试根据另外两个表(TDCE_NETDCE_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:使用多个连接更新语句 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

MS Access 选择多个连接

在 MS Access 中回滚多个 SQL 更新查询

使用 VBA 断开用户与第三方应用程序使用 MS Access 的连接

Ms Access SQL 更新语句不起作用

MS Access中的简单SQL语句[重复]

MS Access UPSERT(更新/插入)SQL [重复]