引用其他表的 SQL MS Access 条件更新查询

Posted

技术标签:

【中文标题】引用其他表的 SQL MS Access 条件更新查询【英文标题】:SQL MS Access Conditional Update Query Referencing Other Tables 【发布时间】:2013-12-14 21:34:35 【问题描述】:

我开始接触 SQL,特别是因为我现在正在处理的问题,我知道如何在 Excel 中使用参考 Countif 公式完成任务,但因为我正在处理近 100 万条记录,Excel 一直在轰炸我,而 SQL 似乎是完成任务的更有效方法。

背景:

基本上我有一个这样的“汇总”表:

 ID_summary(ID_num, exist_2009, exist_2010, exist_2011, exist_2012)

然后我有 4 个表,每个表对应于 2009、2010、2011 和 2012,每个表中只有两列 ID_num 和 date。

2009(ID_num,date)

ID_summary 表包含四年表中存在的所有唯一 ID 的完整列表。我通过四年表的联合创建了这个列表。

问题:

如果 ID 号出现在相应的年份表中,我想为每条记录编写一个更新查询(?),用“TRUE”或“1”填充每个“exists_20XX”列的 ID_summary 表。

例如,如果 ID 002 仅出现在 2009 年和 2012 年,则汇总表中 ID 002 的行应如下所示

ID_summary(ID_num, exist_2009, exist_2010, exist_2011, exist_2012)
ID_002,TRUE,FALSE,FALSE,TRUE

我已经完成了类似的基本查询来进行一些数据清理并获得了成功的结果,但它总是只是引用同一个表中的其他字段来确定是否应该重新编码一个字段。

我正在使用 MS Access 2010。

非常感谢任何帮助!

【问题讨论】:

【参考方案1】:

好的,我检查了这里。

http://msdn.microsoft.com/en-us/library/office/bb221186%28v=office.12%29.aspx

似乎语法可能略有不同 MS Access 比 SQL Server 好。

按以下顺序尝试这两个:

update ID_summary
set exist_2009 = 0 -- false

update
ID_summary ids
left join table_2009 t on ids.ID_num = t.ID_num
set
ids.exist_2009 = 1 -- true
where
(t.ID_Num is not null)

如果是 SQL Server,则需要 使用稍微不同的语法。 但我们在这里讨论的是 MS Access。

update ids
set
ids.exist_2009 = 0 -- false
from
ID_summary ids

update ids
set
ids.exist_2009 = 1 -- true
from
ID_summary ids
left join table_2009 t 
on ids.ID_num = t.ID_num
where
(t.ID_Num is not null)

【讨论】:

以上是关于引用其他表的 SQL MS Access 条件更新查询的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 MS ACCESS 表执行 SQL Server 表的批量更新

迁移到新的 SQL Server 后,在 MS Access 中更新链接表的最佳方法是啥?

使用 VBA (MS Access) 中的 bigint 字段更新 SQL 表

更新查询的 MS Access SQL 错误

MS Access SQL:使用另一个表中的Sum更新连接查询

偶尔在 MS Access 中工作的简单 SQL 更新语句?