【发布时间】: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 为空的记录没有加入。
我尝试了几种不同的方法,但没有按照我的需要让两个表加入。任何帮助将不胜感激。
提前致谢,
【问题讨论】: