我的头衔可能有点令人困惑,但这基本上就是我想做的事情:
我有两张桌子:
表1 =网站
Columns: SiteID SiteName Address
1 Germany 123 A Street
2 Poland 234 B Street
3 France 354 F Street
4 England 643 C Street
5 Russia 968 G Street
表2 = Site_New
Columns: SiteID SiteName Address
1 Germany
2 France
3 Russia
我不想使用表1中的地址更新表2中的地址列,其中表2中的SiteName =表1中的SiteName。如您所见,表1中的站点不在表2中,因此我不关心将这些地址复制到表2。
我正在尝试这段代码:
update Site_New set Address = (select Site.Address from Site where Site_New.SiteName=Site.SiteName)
但我收到错误代码1242:“子查询返回超过1行。”
关于如何做到这一点的任何想法?
答案 0 :(得分:1)
最好使用update
/ join
语法:
update Site_New sn join
Site s
on sn.SiteName = s.SiteName
set sn.Address = s.Address;
但是,根据您的示例数据,您的相关子查询不应导致此类错误。
也许join
应该在SiteId
上,而不是SiteName
:
update Site_New sn join
Site s
on sn.SiteId = s.SiteId
set sn.Address = s.Address;
答案 1 :(得分:0)
你需要像你这样更新选择
UPDATE site_new sn,
( SELECT
sn1.address as _address, sn1.sitename as _sitename
FROM site_new sn1
JOIN site s on s.sitename = sn1.sitename
) t
SET sn.address = t._address
WHERE sn.sitename = t._sitename