Ms-Access

更新訪問中最小絕對差異的查詢小號QL小號問一世SQL

  • July 11, 2016

我在 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]);

引用自:https://dba.stackexchange.com/questions/74192