更新訪問中最小絕對差異的查詢小號QL小號問一世SQL
我在 Access db 中有 3 個表。Table_1 和 Table_2 是源數據的來源,我正在填充 Table_3。
Table_1 具有以下欄位:
- Acct_Name
- 政府辦公室
Table_2 具有以下欄位:
- Acct_Name
- 辦公室_1
- 辦公室_2
Table_3 具有以下欄位:
- Acct_Name
- 最終值
取 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_3.Final_Value 更新為 Table_2.Amt_1,如果 Table_1.Amt 和 Table_2.Amt_1 之間的差值的絕對值小於 Table_1.Amt 和 Table_2.Amt_2 之間的絕對差值,其中 Table_1.Acct_Name 等於 Table_2。帳戶名稱。所以我執行以下更新查詢:
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 的任何連接。這會導致交叉連接,並且所有行都將設置為相同(相當隨機)的值。
這是應該執行正確更新的查詢:
UPDATE (Table_1 INNER JOIN Table_2 ON Table_1.Acct_Name = Table_2.Acct_Name) INNER JOIN Table_3 ON Table_2.Acct_Name = Table_3.Acct_Name SET Table_3.Final_Value = [Table_2].[Amt_2] WHERE Abs([Table_1].[Amt]-[Table_2].[Amt_1])<Abs([Table_1].[Amt]-[Table_2].[Amt_2]);