使用内部联接更新,从两个表更新2列

时间:2010-01-27 17:56:25

标签: sql sql-server sql-update

这是我在sql server 2008中的查询 -

    UPDATE a 
       SET a.col2 = 'new', 
           a.col3 = 'www.google.com', 
           b.col1 = '10'
      FROM table a 
INNER JOIN table b ON a.col1 = b.col1 
     WHERE a.col1 = 7

它崩溃,说明“无效的列名b.col1。”

我如何使这项工作?

4 个答案:

答案 0 :(得分:9)

您一次只能更新1个表

您需要发布2个更新语句

UPDATE a SET a.col2='new', a.col3='www.google.com'
FROM tablea a INNER JOIN tableb  b ON a.col1 = b.col1
WHERE a.col1=7

UPDATE b SET b.col1='10' 
FROM tablea a INNER JOIN tableb b ON a.col1 = b.col1
WHERE a.col1=7

答案 1 :(得分:4)

从稍微查看一下你的查询,你在UPDATE语句中有b.Col1。这是不正确的

UPDATE  a
SET a.col2='new', 
        a.col3='www.google.com', 
        b.col1='10' 
FROM    @table a INNER JOIN 
        @table b ON a.col1 = b.col1 
WHERE   a.col1=7

UPDATE开始,您一次只能更新1个表

答案 2 :(得分:1)

您的语句是“更新A”,并且您正在尝试更新表B中的列。您可能希望创建一个包含表A和B中列的视图,并对其进行更新。您还可以为表A创建触发器 - 可能是更新表B中相应的连接列的触发器。

答案 3 :(得分:0)

为了根据第二个表中另一列的条件更新1个表中的列值,这对我有用:

UPDATE TableA 
SET TableA.col1 = 'dummyVal'
WHERE TableA .ACCID IN (SELECT ACCID FROM TableB WHERE TableB.PRODID LIKE 'XYZ')