如何编写更新SQL以从一个表复制多个记录以更新另一个表上的相应字段?

时间:2018-05-04 19:14:44

标签: sql ms-access access-vba ms-access-2010

我想选择一个字段中由外键组合在一起的所有记录,并更新另一个按外键分组的表中的相应字段。两个表之间的外键不同,彼此无关。

理想情况下,我希望表格从状态A变为状态B

状态A

tbl_Unlisted                   tbl_Listed
ListID      ListDate           ListID      ListDate
  43       04/01/2018            64
  43       04/02/2018            64
  43       04/03/2018            64
  43       04/04/2018            64

状态B

tbl_Unlisted                   tbl_Listed
ListID      ListDate           ListID      ListDate
  43       04/01/2018            64       04/01/2018
  43       04/02/2018            64       04/02/2018
  43       04/03/2018            64       04/03/2018
  43       04/04/2018            64       04/04/2018

这是我对更新SQL的抨击:

UPDATE tbl_Listed
SET ListDate = tbl_Unlisted.ListDate
FROM tbl_Unlisted
WHERE tbl_List.ListID = 64
AND tbl_Unlisted.ListID = 43;

tbl_Listed是我要更新的表格 tbl_Unlisted是包含现有记录的表 ListDate是我想要从tbl_Unlisted复制并更新为tbl_Listed
的字段 ListID是包含tbl_Listed和tbl_Unlisted

的外键的字段

但是,当我尝试执行它时,Update SQL会引发语法错误。

我应该改变什么?提前谢谢!

  

编辑 - 从评论更新

我应该澄清每个表上还有另一个字段对于每个记录都是唯一的,因此第1行= A,第2行= B,第3行= C,第4行= D < / em>

1 个答案:

答案 0 :(得分:2)

您应该利用SQL查询设计模式并轻松创建此查询

如果您要继续使用VBA - 我建议针对不同的ListID进行参数化查询

如果匹配行的FieldName称为“ROW”

,这将有效
UPDATE tbl_Listed 
INNER JOIN tbl_Unlisted 
ON tbl_Listed.Row = tbl_Unlisted.Row 
SET tbl_Listed.ListDate = [tbl_Listed].[ListDate]
WHERE (((tbl_Listed.ListDate) Is Null) 
AND ((tbl_Listed.ListID)=64) 
AND ((tbl_Unlisted.ListID)=43));