使用连接更新另一个表中的表值?

时间:2013-08-20 02:18:23

标签: mysql inner-join

我正在尝试更新计算机主机名的集合,以匹配最近更改的房间号码。数据库中的主机名格式为FL-itf2106a,其中2106是旧房间号。我已经在另一个表中有一个列表,该表在同一行上有新旧房号。我一直试图从主机名的字符串中删除所有非数字,并将其加入更新表失败。

    UPDATE computers c
INNER JOIN updates u 
        ON u.old = (
                    SELECT NumericOnly(c.hostname)
                     WHERE hostname 
                      LIKE "%FC%"
                   )
       SET c.hostname = CONCAT('classf', u.new);

NumericOnly是一个用户函数,它从字符串中删除所有字符但数字。

我正在尝试将hostname列设置为classf +新的房间号。

2 个答案:

答案 0 :(得分:0)

我会利用类似

的机会
    UPDATE computers c
INNER JOIN updates u 
        ON u.old = NumericOnly(c.hostname) 
       SET c.hostname = CONCAT('classf', u.new)
     WHERE c.hostname LIKE "%FC%";

答案 1 :(得分:0)

Postgresql版本对我有用:

update table1 set columnZ = newValue from table1 t1
inner join table2 t2
on t1.columnX = t2.columnY
where table1.uniqueID = t1.uniqueID
and t2.filterColumn = filterValue

http://johnstewien.wordpress.com/2010/03/15/doing-a-join-in-an-update-in-sql-for-postgresql/

这个问题出现在google上“SQL UPDATE JOIN”的前几次点击中。