使用MS Access如何使用多个连接和where子句执行更新?

时间:2014-06-05 20:16:57

标签: sql ms-access-2010

我在使用一些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中完成吗?我已经google了一下,发现了上面我适应了我的需求(实际上我很确定我在SO上找到了上面的内容)。

思想?

非常感谢!

3 个答案:

答案 0 :(得分:3)

我在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,我就会知道。

答案 1 :(得分:1)

我知道这不使用原始代码,但这是一个使用正确语法的通用示例:

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*'

答案 2 :(得分:0)

在Access中找出SQL中的连接的最简单方法是转到“查询设计”窗口,添加所需的表,然后单击并将“列”拖动到要加入的表中。你为所有的桌子做这个,并且你的联接已经完成。此外,如果您的连接变得过于复杂,通常意味着存在数据库设计问题,但我知道修复此问题并不总是生产数据库中的选项。祝你好运!