使用 MS Access 如何使用多个连接和 where 子句执行更新?
Posted
技术标签:
【中文标题】使用 MS Access 如何使用多个连接和 where 子句执行更新?【英文标题】:Using MS Access how to perform an update with multiple joins and where clauses? 【发布时间】:2014-06-05 20:16:57 【问题描述】:我在让一些 MS Access SQL 工作时遇到了一些麻烦。这是高级别的:
我在一个表by15official
中有值,我需要使用它来更新另一个表investmentInfo
中的相关记录。非常简单,除了我需要执行很多连接以确保在investmentTable
中更新正确的记录,我想我可以使用常规 sql 来解决这个问题,但 Access 并不能很好地发挥作用。以下是我正在尝试使用的 sql(导致此错误:“查询表达式中的语法错误(缺少运算符)...”
update ii
set ii.investmentType = by15.InvestmentType
from investmentInfo as ii
inner join
(select by15Official.InvestmentType, by15Official.InvestmentNumber
from (((by15official left join investmentinfo on by15official.InvestmentNumber = investmentInfo.investID)
left join fundingSources on fundingSources.investId = investmentInfo.id)
left join budgetInfo on budgetInfo.fundingID = fundingSources.id)
where investmentinfo.submissionType = 2
and budgetInfo.byYear = 2015
and budgetInfo.type = 'X') as by15
on by15.InvestmentNumber = ii.investID
这似乎应该可行,我正在尝试加入提供investmentType
的这组表,这是我想在主表investmentInfo
中更新的内容。想法?这可以在 Access 中完成吗?我四处搜索,发现上面的内容我适应了我的需求(实际上我很确定我在 SO 上找到了上面的内容)。
想法?
非常感谢!
【问题讨论】:
【参考方案1】:我确实从 MS 论坛上的某个人那里得到了一些帮助。解决方案是稍微不同地格式化我的 SQL。这是最终起作用的代码。
UPDATE
(
(
by15official LEFT JOIN investmentinfo
ON by15official.InvestmentNumber = investmentInfo.investID
)
LEFT JOIN
fundingSources
ON investmentInfo.id = fundingSources.investId
)
LEFT JOIN budgetInfo
ON fundingSources.id = budgetInfo.fundingID
SET investmentInfo.investmentType = by15official.InvestmentNumber
WHERE (investmentinfo.submissionType = 2)
And (budgetInfo.byYear = 2015)
也许上面的Access SQL可以帮到别人。
基本上,您希望在执行 set 和 where 子句之前执行更新和连接。有道理,而且我敢肯定,如果我更擅长编写 SQL,我会知道的。
【讨论】:
【参考方案2】:我知道这没有使用原始代码,但这是一个具有正确语法的通用示例:
UPDATE ([My First Table]
LEFT JOIN [My First Table] ON [My Second Table].[RequestID] =
[My First Table].[ID])
INNER JOIN [My Third Table] ON [My Second Table].[Some Field] =
[My Third Table].[Matching Field]
SET
[My First Table].[Approved By] = [My Third Table].[Approver],
[My First Table].[Approval Date] = [My Second Table].[Modified]
WHERE [My First Table].[Review Status] LIKE '*Approved*'
【讨论】:
【参考方案3】:在 Access 中找出 SQL 中的联接的最简单方法是转到“查询设计”窗口,添加所需的表,然后单击“列”并将其拖动到要基于联接的表中。您对所有表格都执行此操作,然后您的连接就完成了。此外,如果您的连接变得过于复杂,这通常意味着存在数据库设计问题,尽管我知道在生产数据库中解决这个问题并不总是一种选择。祝你好运!
【讨论】:
感谢您的建议。查询设计窗口是一种选择,尽管我不是很喜欢使用它。并不是说它有什么问题,我刚刚习惯了编写自己的 SQL 并且设计窗口似乎过于分离。我很确定我拥有的一对多关系需要有很多连接。不过,我很欣赏你的评论。以上是关于使用 MS Access 如何使用多个连接和 where 子句执行更新?的主要内容,如果未能解决你的问题,请参考以下文章
使用条件连接 MS Access/SQLQuery 中的多个表
错误 3296:具有多个 JOIN 的 MS Access 查询中不支持连接表达式