我正在使用微软Access.
如果这个查询:
(SELECT FERMENT.FermentId
FROM FERMENT
INNER JOIN [BELGIUM BEER]
ON
FERMENT.FermentName = [BELGIUM BEER].FermentId ORDER BY [BELGIUM BEER].BeerId) a
Run Code Online (Sandbox Code Playgroud)
返回FermentId,如何使用该列更新不同的表?
例:
UPDATE EXAMPLETABLE
SET EXAMPLETABLE.FermentId = a.FermentId
FROM a
(SELECT FERMENT.FermentId
FROM FERMENT
INNER JOIN [BELGIUM BEER]
ON
FERMENT.FermentName = [BELGIUM BEER].FermentId ORDER BY [BELGIUM BEER].BeerId) a
Run Code Online (Sandbox Code Playgroud)
Arn*_*sss 20
不确定EXAMPLETABLE与您的数据的关系是什么,但总的来说.
在Access中,SET部分在连接之后,也在顺序跳过选择部分.应该是这样的
UPDATE FERMENT
INNER JOIN ([BELGIUM BEER] ON FERMENT.FermentName = [BELGIUM BEER].FermentId)
SET EXAMPLETABLE.FermentColumn = a.FermentColumn
Run Code Online (Sandbox Code Playgroud)
如果它确实有效,请尝试在查询构建器中构建连接
小智 9
无需定义两个表之间的关系.答案10(Arnoldiusss)几乎是正确的,是迄今为止最易理解和最短的解决方案.并且执行速度最快.但示例代码是错误的.下一个代码来自我的一个应用程序,在MS ACCESS 2013中运行良好.
UPDATE table1 T1
INNER JOIN table2 T2
ON T2.Id = T1.Id
SET T1.myField = T2.myField;
Run Code Online (Sandbox Code Playgroud)
对于"比利时啤酒案例"(我喜欢这个表达;-)它将是:
UPDATE FERMENT AS T1
INNER JOIN [BELGIUM BEER] AS T2 ON T1.FermentName = T2.FermentId
SET T1.FermentColumn1 = T2.FermentColumn1;
Run Code Online (Sandbox Code Playgroud)
假设子查询返回多个值,则需要第二个键来连接(JOIN)新值和要更新的表(EXAMPLETABLE).
在这种情况下,我会尝试这样的事情:
UPDATE T
SET T.FERMENTID = A.FERMENTID
FROM EXAMPLETABLE AS T
INNER JOIN (SELECT FERMENT.FERMENTID,
FERMENT.OTHERID
FROM FERMENT
INNER JOIN [BELGIUM BEER]
ON FERMENT.FERMENTNAME =
[BELGIUM BEER].FERMENTID
ORDER BY [BELGIUM BEER].BEERID) AS A
ON A.OTHERID = T.OTHERID
Run Code Online (Sandbox Code Playgroud)
如果不是这种情况并且子查询返回单个值,请尝试以下操作:
UPDATE EXAMPLETABLE
SET T.FERMENTID = (SELECT FERMENT.FERMENTID
FROM FERMENT
INNER JOIN [BELGIUM BEER]
ON FERMENT.FERMENTNAME =
[BELGIUM BEER].FERMENTID
ORDER BY [BELGIUM BEER].BEERID)
Run Code Online (Sandbox Code Playgroud)
请注意,在这种情况下,您需要保证子查询永远不会返回多行!
| 归档时间: |
|
| 查看次数: |
59599 次 |
| 最近记录: |