用两个表更新?

时间:2009-07-01 10:45:19

标签: sql sql-server

我正在尝试用表B中的数据更新表A.我以​​为我能做到  类似的东西:

 UPDATE A
 SET A.name = B.name
 WHERE A.id = B.id

但是,这不起作用。

任何人都知道我该怎么做?

5 个答案:

答案 0 :(得分:69)

您的查询不起作用,因为您没有 FROM 子句,该子句指定您通过A / B设置别名的表。

请尝试使用以下内容:

UPDATE A
    SET A.NAME = B.NAME
FROM TableNameA A, TableNameB B
WHERE A.ID = B.ID

就个人而言,我更喜欢使用更明确的连接语法,即

UPDATE A
    SET A.NAME = B.NAME
FROM TableNameA A
    INNER JOIN TableName B ON 
        A.ID = B.ID

答案 1 :(得分:17)

对于Microsoft Access(不要笑!)......

UPDATE TableA A
    INNER JOIN TableB B
    ON A.ID = B.ID
SET A.Name = B.Name

答案 2 :(得分:8)

我正在摸不着头脑,至少在MySQL 5.5.30 InnoDB中无法获得John Sansom的Join语法工作。

事实证明这不起作用。

UPDATE A 
    SET A.x = 1
FROM A INNER JOIN B 
        ON A.name = B.name
WHERE A.x <> B.x

但这有效:

UPDATE A INNER JOIN B 
    ON A.name = B.name
SET A.x = 1
WHERE A.x <> B.x

答案 3 :(得分:1)

在PostgreSQL 9.1+中答案对我不起作用

这就是我要做的(您可以在manual here中查看更多信息)

UPDATE schema.TableA as A
SET "columnA" = "B"."columnB"
FROM schema.TableB as B
WHERE A.id = B.id;

如果两个表都使用默认模式,则可以省略该模式。

答案 4 :(得分:-1)

更新A集合A。vals = {} names = {} with open(input_filename,'r') as file: for line in file: l = line.replace("\n","") l = l.split(";") if(vals.has_key(l[0])): vals[l[0]].append(l[2]) else: vals[l[0]] = [l[2]] names[l[0]] = l[1] with open(output_filename,'w') as file: for key in vals.keys(): res = str(key)+";"+str(names[key])+";"+str(vals[key][0]) for i in range(0,len(vals[key])-1): res += " "+vals[key][i+1] res += '\n' file.write(res) =(从B WHERE A.title = B.title中选择ID)