我正在尝试更新计算机主机名的集合,以匹配最近更改的房间号码。数据库中的主机名格式为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 +新的房间号。
答案 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”的前几次点击中。