Sql 参照另一列更新列
我只想将下表1中括号内的数字更新为表2中的值 例如:Sql 参照另一列更新列,sql,postgresql,Sql,Postgresql,我只想将下表1中括号内的数字更新为表2中的值 例如: VALUE1(1234)应更新为VALUE1(1111) 表1 ID | NAME | VALUE | ---------------------------------- 1 | Test | VALUE1(1234) | 2 | Test2 | VALUE2(5678) | 3 | Test3 | VALUE3(0987) | 4 | Test4
VALUE1(1234)
应更新为VALUE1(1111)
表1
ID | NAME | VALUE |
----------------------------------
1 | Test | VALUE1(1234) |
2 | Test2 | VALUE2(5678) |
3 | Test3 | VALUE3(0987) |
4 | Test4 | VALUE3(6543) |
5 | Test5 | VALUE3(3210) |
表2
OLD | NEW |
-------------------
1234 | 1111 |
5678 | 2222 |
0987 | 3333 |
6543 | 4444 |
3210 | 5555 |
谢谢你的帮助 我们可以尝试使用相关子查询进行更新,并结合正则表达式替换逻辑:
UPDATE TABLE1 t1
SET "VALUE" = (SELECT REGEXP_REPLACE(t1."VALUE", '\(\d+\)', '(' || t2.NEW || ')')
FROM TABLE2 t2
WHERE t1."VALUE" LIKE '%(' || t2.OLD || ')%');
在更新中使用来自的
:
update table1 t1
set t1.value = t2.new
from table2 t2
where t2.old = t1.value;
如果值实际上是一个字符串,请使用replace()
和like
进行匹配:
update table1 t1
set t1.value = replace(t1.value, t2.old, t2.new)
from table2 t2
where t1.value like '%(' || t2.old || ')%';
使用表2中的匹配值更新表:
update TABLE1
set "VALUE" = REPLACE(
TABLE1."VALUE",
'(' || TABLE2."OLD" || ')',
'(' || TABLE2."NEW" || ')'
)
from TABLE2
where TABLE1."VALUE" LIKE '%(' || TABLE2."OLD" || ')%';
请参阅。
结果:
这是一个非常糟糕的数据库设计。你不应该储存这样的东西。类似于value1(1234)
的内容应该存储在两个单独的列中。一个用于value1
和一个或1234
| ID | NAME | VALUE |
| --- | ----- | ------------ |
| 1 | Test | VALUE1(1111) |
| 2 | Test2 | VALUE2(2222) |
| 3 | Test3 | VALUE3(3333) |
| 4 | Test4 | VALUE3(4444) |
| 5 | Test5 | VALUE3(5555) |