【问题标题】:MS-Access SQL Duplicate Entries on Join with if statement使用 if 语句加入 MS-Access SQL 重复条目
【发布时间】:2020-07-02 07:05:27
【问题描述】:

我有一个访问数据库,并且我在数据库的各个方面使用“DoCmd.RunSQL”来更新/插入表和从表中删除。

我有两个表“Table_1”,它们的行数刚刚超过 8000 行。我需要使用大约 5000 行的“Table_2”中的新余额来更新此表中的特定行。

两个表中的共同字段是 AccountID 和 SUBID。

如果 Table_2 中的 AccountID 为空,那么我想使用 SUBID 作为连接。

我尝试了以下代码:

Call RunSQL("INSERT INTO temp_Table " & _
    "SELECT TABLE_1.*  " & _
    ",TABLE_2.[Balance], TABLE_2.[T2_AccountID )], TABLE_2.[T2_SUBID )]   " & _
    "FROM (SELECT * FROM TABLE_1 WHERE TABLE_1.Business = 'Criteria1' AND TABLE_1.Type IN ('Criteria2','Criteria3') ) TABLE_1 " & _
    "LEFT JOIN TABLE_2 on " & _
    "( IIf(TABLE_2.[T2_AccountID )] IS NOT NULL, TABLE_2.[T2_AccountID )] = TABLE_1.[AccountID ] AND TABLE_2.[T2_SUBID )] = TABLE_1.[SUBID], TABLE_2.[T2_SUBID )] = TABLE_1.[SUBID]) ) ")

上述代码的问题在于它会导致重复,因此将我的记录集增加到原始 8k 大小的两倍以上。

原因是两个表中有重复的“SUBID”值,但并非所有这些 SUBID 都有对应的“AccountID”。因此,对于 AccountID 为 null 的项目,我想使用 SUBID 作为连接条件,但是对于那些没有 null AccountID 的项目,我指定的连接似乎不起作用并导致这些项目重复。

例如,表 1 中的 SUBID : 6583 有两条记录,一条在 AccountID 字段中有值,另一条为空。

在表 2 中同样 SUBID 为 6583 也有 2 条记录,与 TABLE1 类似,一条在 AccountID 字段中有值,另一条为空。

所以我在上面的代码中使用的连接导致引入了一个附加记录,这意味着现在存在 3 个记录而不是 2 个。其中两个记录具有来自 TABLE2 的空白 AccountID 字段,而填充了 2 个 AccountID来自 TABLE1,所以它似乎在复制 TABLE1 记录

我尝试使用以下连接条件解决此问题:

LEFT JOIN TABLE_2 on TABLE_2.[T2_AccountID )] = TABLE_1.[AccountID ] AND TABLE_2.[T2_SUBID )] = TABLE_1.[SUBID]

但是,当我使用上述方法时,AccountID 为空的记录没有加入。

我尝试了几种不同的方法,但没有按照我的需要让两个表加入。任何帮助将不胜感激。

提前致谢,

【问题讨论】:

    标签: sql ms-access


    【解决方案1】:

    考虑:

    UPDATE Table1 INNER JOIN Table2 
    ON Nz(Table1.AccountID,Table1.SubID)=Nz(Table2.AccountID,Table2.SubID) 
    SET Table1.Balance = Table2.Balance
    WHERE ...;
    

    如果您不想使用 VBA Nz() 函数:
    ON IIf(Table1.AccountID IS NULL, Table1.SubID, Table1.AccountID)=IIf(Table2.AccountID IS NULL, Table2.SubID, Table2.AccountID)

    【讨论】:

      猜你喜欢
      • 2020-10-05
      • 2013-10-21
      • 1970-01-01
      • 1970-01-01
      • 2020-02-10
      • 2011-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多