2012-02-17 8 views
0

現在クエリを使用していますが、すべてのフィールドを更新しないことがあります。 これには回避策が必要です。誰か助けてくれますか?サブテーブルを使用して別のテーブルを使用してテーブルを更新する

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 

表2:

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

私の目標は、うまくいけば、TABLE1のすべての行のために、この例では( "123456" のみ 部分文字列を取得することである テーブル2の特定の接頭辞に一致する。

任意のhel pが大いに評価されるでしょう!ありがとうございました!

+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 | 
+------------+--------+--------+ 
+0

レスポンスありがとうございますMosty! PostgreSQL 8.2.1を使用していますが、今は更新できません。しかし、私はキャストの表現にある程度失われています。それは "::"と同じですか... ...また、左(...の部分は私のもので働いていないようですが、何がうまくいかなかったのだろうか) – JPT

+0

ちょっとジョン! Postresについて(私は何も分かりませんが、実際は)知っていますが、バージョン9で動作すると確信しています。[link](http://sqlfiddle.com/#!1/04bef/19)を見てください。 Postgresでキャストする方法を知っていますが、あなたが通常行う方法をキャストしてください:) * left *はバージョン9で追加されたようですが、実際には* substring(1、x)*と同じです。 (http://www.postgresql.org/docs/8.2/static/functions-string.html)および[9.1](http://www.postgresql.org/docs/9.1/static/functions-string.html) –

+0

さらに、私はこれを試しました:番号を選択して、接頭辞(t1.numberから長さ((t2.prefix)::整数+ 1))接尾辞として t1を結合するt2 on t2.prefix = substring(t1.number char_length(t2.prefix :: int + 1)の場合は1から); – JPT

関連する問題