更新表,通过Sub-Select使用另一个表设置子字符串

时间:2012-02-17 04:00:02

标签: sql postgresql substring subquery

我目前正在使用查询,但有时它不会更新所有字段。 我需要一个解决方法。有人能帮助我吗?

update table1 
set number = 
( 
select substring(number from offset) 
from table2 
where strpos(number,prefix) = '1' 
order by length(prefix) 
desc limit '1' 
) ; 

表1:

number
----------
1001123456

表2:

prefix | offset
-------+-------
1001   | 5

我的目标,希望是只检索 substring(在本例中为table1中的每一行的“123456”) 与table2中的特定前缀匹配。

任何帮助将不胜感激!谢谢!

1 个答案:

答案 0 :(得分:1)

实际上您不需要offset字段。

表1:

+------------+
|   NUMBER   |
+------------+
| 1001123456 |
|   10012222 |
|  200244444 |
|    2003666 |
+------------+

表2:

+--------+
| PREFIX |
+--------+
|   1001 |
|  20036 |
+--------+

<强>查询:

select number, prefix,
  cast(
    substring(cast(t1.number as text), 
              char_length(cast(t2.prefix as text)) + 1)
  as integer) as suffix
from t1
join t2 on cast(t2.prefix as text) = 
  left(cast(t1.number as text),
       char_length(cast(t2.prefix as text)))

<强>结果:

+------------+--------+--------+
|   NUMBER   | PREFIX | SUFFIX |
+------------+--------+--------+
| 1001123456 |   1001 | 123456 |
|   10012222 |   1001 |   2222 |
|    2003666 |  20036 |     66 |
+------------+--------+--------+