我在使用一些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上找到了上面的内容)。
思想?
非常感谢!
答案 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中的连接的最简单方法是转到“查询设计”窗口,添加所需的表,然后单击并将“列”拖动到要加入的表中。你为所有的桌子做这个,并且你的联接已经完成。此外,如果您的连接变得过于复杂,通常意味着存在数据库设计问题,但我知道修复此问题并不总是生产数据库中的选项。祝你好运!