使用if语句进行连接时的MS-Access SQL重复条目

时间:2020-07-01 10:13:35

标签: sql ms-access

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

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

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

如果Table_2中的AccountID为null,那么我想使用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字段中有一个值,而另一条为null。

在表2中,对于6583的相同SUBID,还有2条记录,类似于TABLE1,其中一条在AccountID字段中具有一个值,而另一条为null。

因此,我在上面的代码中使用的联接导致添加一条记录,这意味着现在存在3条记录,而不是2条记录。其中两条记录中的TABLE2中有一个AccountID字段为空,而其中的AccountID中有2条已填充来自TABLE1,因此似乎在复制TABLE1记录

我尝试通过使用以下加入条件来解决此问题:

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

但是,当我使用以上代码时,AccountID为空的记录不会加入。

我尝试了几种不同的方法,但并没有按照需要将两个表连接起来。任何帮助将不胜感激。

预先感谢

1 个答案:

答案 0 :(得分: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)