ms access sql join with if语句中的重复项

z4bn682m  于 2021-08-01  发布在  Java
关注(0)|答案(1)|浏览(288)

我有一个access数据库,我正在使用'docmd.runsql'对数据库的各个方面进行更新/插入和从表中删除。
我有两个表'表1',只有8000多行。我需要用“表2”中的新余额更新此表中的特定行,该余额约有5000行。
两个表中的公共字段都是accountid和subid。
如果accountid在表2中为null,那么我想使用subid作为联接。
我尝试了以下代码:

  1. Call RunSQL("INSERT INTO temp_Table " & _
  2. "SELECT TABLE_1.* " & _
  3. ",TABLE_2.[Balance], TABLE_2.[T2_AccountID )], TABLE_2.[T2_SUBID )] " & _
  4. "FROM (SELECT * FROM TABLE_1 WHERE TABLE_1.Business = 'Criteria1' AND TABLE_1.Type IN ('Criteria2','Criteria3') ) TABLE_1 " & _
  5. "LEFT JOIN TABLE_2 on " & _
  6. "( 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作为联接条件,但是对于那些accountid不为null的项,我指定的联接似乎不起作用,并且会导致这些项中出现重复。
例如,在subid:6583的表1中有两条记录,一条在accountid字段中有一个值,而另一条为null。
在表2中,对于6583的同一子ID,也有2条记录,类似于表1,一条在accountid字段中有一个值,而另一条为空。
因此,我在上面的代码中使用的连接导致一个附加记录被引入,这意味着现在存在3个记录而不是2个记录。其中两条记录的accountid字段为空,而accountid字段中的2条是从表1填充的,因此它似乎与表1记录重复
我尝试使用以下联接条件解决此问题:

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

但是,当我使用上面的记录时,accountid为空的记录不会加入。
我试过几种不同的方法,但没有按我的需要把两张table连接起来。任何帮助都将不胜感激。
提前谢谢,

cetgtptt

cetgtptt1#

考虑:

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

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

相关问题