mysql从第一个表中的列更新第二个表中的列的行,其中第一个表中的另一个列与第二个表中的列匹配

时间:2014-08-11 19:50:25

标签: mysql sql sql-update sql-insert insert-select

我的头衔可能有点令人困惑,但这基本上就是我想做的事情:

我有两张桌子:

表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行。”

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

2 个答案:

答案 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