代码之家  ›  专栏  ›  技术社区  ›  Phil H

我的SQL语法有什么问题吗?

  •  2
  • Phil H  · 技术社区  · 16 年前

    我有两个表,用一个公共键关联。因此,表A具有键辅助和值名称,表B具有键辅助、投标和值名称、值:

    AID Name
    74  Alpha
    
    AID BID Name  Value
    74  4   Beta  Brilliance
    

    我想只使用名称字段,将tableb值从brightnese更新到barmy。我以为我可以通过包含联接的更新来完成,但是Access(我知道…)抱怨“查询表达式中的语法错误(缺少运算符)”,然后是“barmy”中的所有内容:

    UPDATE tB
    SET tB.Value='Barmy'
    FROM `TableB` tB
    INNER JOIN `TableA` tA
      ON tB.AID=tA.AID
    WHERE tB.Name='Beta'
      AND tA.Name='Alpha';
    

    我犯了什么罪?或者只是访问不一致?

    6 回复  |  直到 14 年前
        1
  •  4
  •   Phil H    16 年前

    奇怪的是,我发现答案是使用隐式连接:

    UPDATE `TableA`, `TableB` 
     SET `TableB`.Value = 'Barmy'
    WHERE `TableA`.AID=`TableB`.AID
     AND `TableA`.Name='Alpha'
     AND `TableB`.Name='Beta';
    
        2
  •  1
  •   Martijn Laarman    16 年前

    老实说,我好几年没接触过(幸运的是) this thread 似乎暗示这是正确的语法。

    UPDATE TableB tB
    SET tB.BValue='Barmy'
    INNER JOIN TableA tA
      ON tB.AID=tA.AID
    WHERE tB.Name='Beta'
      AND tA.Name='Alpha';
    
        3
  •  1
  •   Fionnuala    16 年前

    我估计,根据测试:

    UPDATE TableB tB
    INNER JOIN TableA tA
      ON tB.AID=tA.AID
    SET tB.Value='Barmy'
    WHERE tB.Name='Beta'
      AND tA.Name='Alpha';
    
        4
  •  0
  •   Ian Jacobs    16 年前

    它可能不知道什么是tb,直到在 FROM 线。尝试 UPDATE TableB ....

        5
  •  0
  •   Thomas    16 年前

    一种解决方案是用hoyle ansi编写(它不识别update语句中的from子句):

    UPDATE TableB
    SET BValue="Barmy"
    Where Name="Beta"
        And Exists( Select 1 
                    From TableA As TA 
                    Where TA.Name = "Alpha"
                        And TA.AID = TableB.AID );
    

    最后一个补充是,access处理update语句中的联接,方法是将它们放入update子句中,如下所示:

    UPDATE TableB
        INNER JOIN TableA tA
            ON TableB.AID=tA.AID    
    SET TableB.BValue="Barmy"
    WHERE TableB.Name="Beta"
      AND tA.Name="Alpha";
    

    编辑 另一个项目,Access使用双引号来标识字符串,而不是单引号。

        6
  •  0
  •   Sandro    16 年前

    Access是否执行子查询?

    UPDATE TableB
    SET TableB.Value='Barmy'
    WHERE TableB.AID = (SELECT TableA.AID WHERE TableA.Name='Alpha')
    
    推荐文章