我在 Access 数据库中有 3 个表。Table_1和Table_2是源数据的来源,我正在填写Table_3。
Table_1 具有以下字段:
- 账户名
- 金额
Table_2 有以下字段:
- 账户名
- Amt_1
- Amt_2
Table_3 有以下字段:
- 账户名
- 最终值
假设 Table_1.Amt 中的值有效,我想知道 Table_2 中的两个值 Amt_1 或 Amt_2 中的哪一个与 Table_1.Amt 更匹配。Amt_1 和 Amt_2 是通过 2 种不同的求和算法得出的(不同的部分加在一起得出总值)。我想使用更接近的匹配来填充 Table_3.Final_Value。
为简单起见,我们假设 Table_1.Acct_Name 与 Table_2.Acct_Name 一对一匹配。
由于已知对于 Table_2 (Amt_1) - (Amt_2) = 0 中的大部分行,我从以下追加查询开始(Table_3 为空):
INSERT INTO Table_3 ([Acct_Name],[Final_Value])
SELECT [Table_2].[Acct_Name], [Table_2].[Amt_2]
FROM Table_2
GROUP BY [Table_2].[Acct_Name], [Table_2].[Amt_2]
HAVING ((([Table_2].[Acct_Name])<>"0"));
此时,所有 Table_3.Final_value 字段都等于 Table_2.Amt_2,Table_2.Acct_Name 等于 Table_3.Acct_Name。现在,如果 Table_1.Amt 和 Table_2.Amt_1 之间的差值的绝对值小于 Table_1.Amt 和 Table_2.Amt_2 之间的绝对差值(其中 Table_1.Acct_Name 等于 Table_2),我只想将任何 Table_3.Final_Value 更新为 Table_2.Amt_1。账户名。所以我运行以下更新查询:
UPDATE Table_3,
Table_1 INNER JOIN Table_2 ON [Table_1].[Acct_Name] = [Table_2].[Acct_Name]
SET [Table_3].[Final_Value] = [Table_2].[Amt_1]
WHERE (((Abs([Table_1]![Amt]-[Table_2]![Amt_1]))<(Abs([Table_1]![Amt]-[Table_2]![Amt_2])))
不知何故,当我运行上面的更新查询时,Table_3.Final_Value 中的所有行都相等。什么!?
任何帮助将不胜感激。提前致谢。
您发布的更新语句不包括任何与 table_3 的连接。这会导致交叉连接,并且所有行都将设置为相同(相当随机)的值。
这是应该执行正确更新的查询: