昨天我发现了一些关于 SQL 的奇怪之处,或者至少是PostreSQL。看看下面并解释为什么第一个查询什么都不做,而第二个查询正好。
-- this silently does nothing
update bodycontent
set body = replace(body, '~' || u.oldusername, '~' || u.newusername)
from usermigration u;
-- this works as expected
update bodycontent
set body = replace(body, '~' || oldusername, '~' || newusername)
from usermigration u;
更新:我认为每个人都忽略了这个问题的重点,笛卡尔积是一个原始意图:将会有 N x M 更新,这是设计使然。
我需要从 bodycontent.xml 替换迁移表中每一行中存在的所有用户名对。
而且,我再说一遍,第二个版本按预期工作,但第一个版本没有更新。我只想知道为什么。
| usermigration table |
--------------------------
oldusername | newusersname
--------------------------
johndoe | johnd
john.smith | johnsmith
这是 PostgreSQL 中的错误吗?