我正在尝试用表B中的数据更新表A.我以为我能做到 类似的东西:
UPDATE A
SET A.name = B.name
WHERE A.id = B.id
但是,这不起作用。
任何人都知道我该怎么做?
答案 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)