2017-07-10 7 views
0

私は、 'data_sent'列から何らかの値を取り出し、この値で 'registry'列を更新しようとしています。しかし、問題を得る。以下各行の列を別の列の部分文字列値で更新するにはどうすればよいですか?

問合せ:

update can_data 
set registry = (SELECT cast(SUBSTR(split_part(data_sent, 
'registry>', 2), 1, 26) as numeric) 
as registry FROM can_data); 

SQLエラー:

ERROR: more than one row returned by a subquery used as an expression
********** Error **********

ERROR: more than one row returned by a subquery used as an expression SQL state: 21000

+0

サブクエリは複数のレコードを返します。あなたのデータはわかりませんが、これらの値が等しい場合、サブクエリのDISITNCTが役立ちます。新しいレジストリ値として本当に設定したいものについて考える必要はありません。TOP 1は汚い解決策かもしれません –

+0

Didあなたはhttps://stackoverflow.com/questions/21048955/postgres-error-more-than-one-row-returned-by-a-subquery-used-as-an-expressionをチェックしますか?それは同じ問題のようなものです。 –

+0

そのような計算された値を格納することは、一般的には悪い考えです。 (データの不一致が発生します)。代わりにビューを作成します。 – jarlh

答えて

0

あなたはサブクエリを必要としません。

set registry = cast(SUBSTR(split_part(data_sent, 
'registry>', 2), 1, 26) as numeric 
+0

すごく簡単です。 –

関連する問題