Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 参照另一列更新列_Sql_Postgresql - Fatal编程技术网

Sql 参照另一列更新列

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

我只想将下表1中括号内的数字更新为表2中的值

例如:

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) |