从内部联接更新SQL

从内部联接更新SQL,sql,ms-access,Sql,Ms Access,我正在使用microsoft Access 如果此查询: (SELECT FERMENT.FermentId FROM FERMENT INNER JOIN [BELGIUM BEER] ON FERMENT.FermentName = [BELGIUM BEER].FermentId ORDER BY [BELGIUM BEER].BeerId) a 返回ID,如何使用该列更新其他表 例如: UPDATE EXAMPLETABLE SET EXAMPLETABLE.FermentId = a

我正在使用microsoft Access

如果此查询:

(SELECT FERMENT.FermentId
FROM FERMENT
INNER JOIN [BELGIUM BEER]
ON
FERMENT.FermentName = [BELGIUM BEER].FermentId ORDER BY [BELGIUM BEER].BeerId) a
返回ID,如何使用该列更新其他表

例如:

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

不确定EXAMPLETABLE与您的数据之间的关系是什么,但一般来说

在Access中,在连接后设置零件,也可以跳过订单中的选择零件。 应该是这样的

UPDATE FERMENT
INNER JOIN ([BELGIUM BEER]  ON FERMENT.FermentName = [BELGIUM BEER].FermentId) 
SET EXAMPLETABLE.FermentColumn = a.FermentColumn

如果不起作用,请尝试在查询生成器中构建联接

假设子查询返回多个值,则需要第二个键来连接新值和要更新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 
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)
如果情况并非如此,并且子查询返回单个值,请尝试以下操作:

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 
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)

注意,在这种情况下,您需要保证子查询永远不会返回多行

不需要定义两个表之间的关系。答案10 Arnoldiuss几乎是正确的,是迄今为止最容易理解和最短的解决方案。而且执行速度最快。但是示例代码是错误的。下一个代码来自我的一个应用程序,在MS ACCESS 2013中运行良好

    UPDATE table1 T1 
    INNER JOIN table2 T2 
    ON T2.Id = T1.Id
    SET T1.myField = T2.myField;
对于比利时啤酒盒,我喜欢这个表达;-它将是:

    UPDATE FERMENT AS T1
    INNER JOIN [BELGIUM BEER] AS T2 ON T1.FermentName = T2.FermentId 
    SET T1.FermentColumn1 = T2.FermentColumn1;

如果我没有弄错的话,您需要在EXAMPLETABLE和您选择的对象之间建立一个关系,然后您可以使用类似更新EXAMPLETABLE SET EXAMPLETABLE.发酵ID=选择发酵。发酵ID=从发酵内部连接[BELGIUM BEER]到发酵。发酵名称=[BELGIUM BEER]。发酵ID WHERE EXAMPLETABLE.relationFieldName=[BELGIUM BEER].relationField ORDER BY[BELGIUM BEER].Beeridoll,我只是在一篇评论中写下了这一点,不过用的话要少一些。我投你一票!你是指列还是带行的记录?行!如果子查询返回多行,SQL将不知道要使用哪些值更新表:-子查询返回750条记录,exampletable包含750条记录。我基本上想用子查询中的750条记录更新exampletable.fymentId。谢谢,你的查询成功了。我的日子不好过,因为我加入了错误的表格:P