【问题标题】:SQL query in access joins, need it to also append where there is a new REF number [duplicate]访问连接中的 SQL 查询,还需要在有新 REF 编号的位置附加 [重复]
【发布时间】:2015-08-16 09:36:26
【问题描述】:

我有两张桌子可以访问。更新很好,但我是否还可以在同一个查询中附加工作表中尚未包含的任何参考编号?

UPDATE [UPDATEtable tester2]

INNER JOIN [Update2 Linked]     ON      

  [UPDATEtable tester2].[REF]   = [Update2 Linked].[REF]

set  

  [UPDATEtable tester2].[NAMES]     = [Update2 Linked].[NAMES] 
, [UPDATEtable tester2].[AMOUNT]  = [Update2 Linked].[AMOUNT]

然后我的问题来自“追加”或插入任何新条目,其中 REF 编号尚未在 [UPDATEtable tester2] 中。我试图在上面的脚本下面添加以下内容但没有成功。它说缺少运营商?

INSERT INTO       [UPDATEtable tester2].[REF] , [UPDATEtable tester2].[NAMES] , [UPDATEtable tester2].[AMOUNT]  

SELECT  [REF] , [NAMES] , [AMOUNT]

FROM    [Update2 Linked]

WHERE [Update2 Linked].[REF] 

NOT IN 

(SELECT   [UPDATEtable tester2].[REF]   FROM    [UPDATEtable tester2])

问候,

【问题讨论】:

    标签: ms-access ms-access-2007


    【解决方案1】:

    对于您的第一项,不,您不能在同一查询中组合更新和追加过程。您可以预先使用宏或 VBA 对 DLookup [REF] 值进行处理,然后在逻辑上决定更新或追加操作。

    至于你的查询问题,在 SQL INSERT INTO 语句中,你只需指定表名,然后在括号中列出字段:

    INSERT INTO [UPDATEtable tester2] ([REF], [NAMES], [AMOUNT])
    SELECT [REF], [NAMES], [AMOUNT]
    FROM [Update2 Linked]
    WHERE [Update2 Linked].[REF]
    NOT IN
      (SELECT [UPDATEtable tester2].[REF] 
       FROM [UPDATEtable tester2]);
    

    或者,为了避免使用 IN 子查询,您可以使用 LEFT JOIN Null 版本:

    INSERT INTO [UPDATEtable tester2] ([REF], [NAMES], [AMOUNT])
    SELECT [Update2 Linked].[REF], [Update2 Linked].[NAMES], [Update2 Linked].[AMOUNT]
    FROM [Update2 Linked]
    LEFT JOIN [UPDATEtable tester2]
      ON [Update Linked].[REF] = [UPDATEtable tester2].[REF] 
    WHERE [UPDATEtable tester2].[REF] Is Null;
    

    【讨论】:

    • 谢谢@Parfait。我看到答案已经关闭。我有类似的东西,我在 S/O 的其他地方找到了左连接方式。唯一不同的是第二行“SELECT DISTINCT A.[REF], A.[NAMES], A.[AMOUNT]”
    • @gord 汤普森,感谢您的链接。我不知道什么是更新插入!
    猜你喜欢
    • 1970-01-01
    • 2019-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多