0

我的标题可能有点混乱,但这基本上是我想做的:

我有两张桌子:

表 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 中的站点名称 = 表 1 中的站点名称。如您所见,表 1 中有一些站点不在表 2 中,所以我没有关心将这些地址复制到表 2。

我正在尝试这段代码:

update Site_New set Address = (select Site.Address from Site where Site_New.SiteName=Site.SiteName)

但我收到错误代码 1242:“子查询返回超过 1 行。”

关于如何做到这一点的任何想法?

4

2 回答 2

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;
于 2014-08-11T19:56:28.190 回答
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
于 2014-08-11T19:54:02.190 回答