首页 > 解决方案 > 如何编写更新 SQL 以从一个表中复制多条记录以更新另一表上的相应字段?

问题描述

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

理想情况下,我希望表格从看起来像 State A 变成 State 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 外键的字段

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

关于我应该改变什么的任何想法?先感谢您!

编辑 - 从评论更新

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

标签: sqlms-accessvbams-access-2010

解决方案


您应该利用 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));

推荐阅读