0

我正在尝试更新一组计算机主机名以匹配最近更改的房间号。数据库中的主机名格式类似于 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 是一个用户函数,用于从字符串中删除除数字之外的所有字符。

我正在尝试将主机名列设置为 classf + 新房间号。

4

2 回答 2

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/

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

于 2014-03-09T22:19:26.817 回答
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%";
于 2013-08-20T02:22:50.650 回答