![](/img/trans.png)
[英]updating a table using the max date and values from another table using sql in ms-access
[英]Updating values in ms-access table with values from another table
我有一個帶有兩個表T1和T2的Access 2010數據庫。 我想編寫一個更新查詢,以便T1中的值被T2中的值更新。 T2有其他字段,而T1沒有。 這些字段應忽略以進行更新。 除了那些字段,T1和T2共享相同的字段和字段名稱。
由於字段的數量很大(至少50個),因此我試圖查找查詢的簡單拖放配置。 通過將T1的主鍵拖到T2的主鍵,我在設計視圖中連接了兩個表。 然后,我將T1的所有字段添加到表視圖下面的數據網格中。
Access現在希望我選擇並輸入添加字段下面的每個字段([T2]。[fieldname])。 我想嘗試實現的是那些信息自動填寫。 我懷疑Access缺少如此重要的功能,並且會感謝有人向我指出正確的方向或對為什么這不是更新表的正確方法提供一些見解。
考慮在更新查詢中的INNER JOIN
:
UPDATE Table1 t1
INNER JOIN Table2 t2 ON t1.ID = t2.ID
SET
t1.Col1 = t2.Col1,
t1.Col2 = t2.Col2,
t1.Col3 = t2.Col3,
...
但是,編寫50個字段的SET
行有點繁瑣,而且您發現使用“設計視圖”不容易做到。 因此,考慮使用VBA使用querydef以編程方式創建查詢,並遍歷tabledef的字段:
Public Sub CreateUpdateQuery()
Dim tbl As DAO.TableDef
Dim qdf As DAO.querydef
Dim fld As DAO.Field
Dim strSQL As String
strSQL = "UPDATE Table1 t1 INNER JOIN Table2 t2 ON t1.ID = t2.ID SET "
For Each tbl In CurrentDb.TableDefs
If tbl.Name = "Table1" Then
For Each fld In tbl.Fields
If fld.Name <> "ID" Then
strSQL = strSQL & " t1.[" & fld.Name & "] = t2.[" & fld.Name & "],"
End If
Next fld
End If
Next tbl
strSQL = Left(strSQL, Len(strSQL) - 1) & ";" ' REPLACING LAST COLUMN
For Each qdf In CurrentDb.QueryDefs
If qdf.Name = "QryName" Then
CurrentDb.Execute "DROP TABLE " & qdf.Name ' DELETES QUERY IF EXISTS
End If
Next qdf
Set qdf = CurrentDb.CreateQueryDef("QryName", strSQL) ' SAVES A STORED QUERY
Set tbl = Nothing
Set qdf = Nothing
End Sub
我不確定您嘗試的問題是什么,但是使用編碼的更新查詢(例如:
UPDATE T1
SET T1.col1 = T2.col1,
T1.col2 = T2.col2,
T1.col3 = T2.col3,
[repeat for each field you're updating]
WHERE T1.pKey = T2.pKey
通過僅包含要更新的T1中的字段,T2中的其他字段就沒有關系。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.