Обновление таблицы, установка подстроки с помощью другой таблицы с помощью Sub-Select - PullRequest
0 голосов
/ 17 февраля 2012

Я сейчас использую запрос, но иногда он не обновляет все поля. Мне нужно обойти это. Кто-нибудь может мне помочь?

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

table1:

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

table2:

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

Моя цель, надеюсь, состоит в том, чтобы получить только подстрока (в этом примере «123456» для каждой строки в таблице1 который соответствует конкретному префиксу в таблице 2.

Любая помощь будет принята с благодарностью! Спасибо!

1 Ответ

1 голос
/ 17 февраля 2012

В действительности вам не нужно поле 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 |
+------------+--------+--------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...