当列值匹配时,从另一个表更新一个表中的多行

时间:2019-11-20 13:28:10

标签: sql sql-server

我想用Table2中的值更新Table1中的列,其中table1中的邮政编码值与table2相匹配。

它必须与多行一起使用,因为某些行具有相同的邮政编码,纬度和经度数据,但门号不同。

我正在使用下面显示的语句。我正在尝试使用来自table2的纬度和经度数据更新table1以匹配邮政编码。

update table1
set latitude = (select latitude from table2 where table1.postcode = table2.postcode);

我收到错误消息:

  

子查询返回了多个值。

Table1 
id Postcode Street          City    Latitude Longitude
1  N76PP    44 Camden Road  London  NULL     NULL
2  N76PP    45 Camden Road  London  NULL     NULL
3  N76PP    46 Camden Road  London  NULL     NULL

Table2
id Postcode Street          City    Latitude Longitude
1  N76PP    44 Camden Road  London  51.5166  -0.052787
2  N76PP    45 Camden Road  London  51.5166  -0.052787
3  N76PP    46 Camden Road  London  51.5166  -0.052787

2 个答案:

答案 0 :(得分:0)

以下语句在MySQL中工作正常:

update table1 t1
inner join table2 t2 on t1.postcode=t2.postcode
set t1.latitude=t2.latitude, t1.some_other_field = t2.zzz

也可以看看SQL update from one Table to another based on a ID match

ms sql服务器版本:

UPDATE
    table1
SET
    table1.latitude=table2.latitude
FROM
    table2
INNER JOIN
    table2
ON 
    table1.postcode = table2.postcode;

答案 1 :(得分:0)

该子查询将根据您的查询返回多个记录,您正尝试用无法完成的多个记录来更新一列。

在这种情况下,您可以使用JOIN。

update t1 set t1.latitude  = t2.latitude 
from table1 as t1 
inner join table2 as t2 on 
t1.postcode = t2.postcode and t1.street = t2.street