web-dev-qa-db-ja.com

別の列または別の列の値で列を更新する

PostgreSQL(バージョン9.1を使用しています)では、1つのクエリで列の値を別の列の値で一括更新できますが、他の列の値がnullの場合は、3番目の列の値を使用します。 3番目の列が現在の日時を使用できない場合(すべての列の型はtimestampです)

変える必要がある

 columnA columnB columnC 
 null foo bar 
 null null baz 
 null null null 

 columnA columnB columnC 
 foo foo bar 
 baz null baz 
 quz null null 

ここで、quzは現在の日時です。

4
Florent2

COALESCE() function を使用して更新を実行できます。

UPDATE ...
SET columnA = COALESCE(columnB, columnC, now()); 

COALESCEは、指定したリストの最初のnull以外の値を返します。

11
LowlyDBA

NULL値ではなく COALESCE を使用してデフォルトを提供できます。これは可変関数であるため、任意の数のパラメーターを取ることができます。戻り値は、最初のNULL以外のパラメータになります(存在しない場合でも、NULLを返します)。

これを使用すると、UPDATEは次のようになります。

UPDATE your_table
SET columnA = COALESCE(columnB, columnC, 'quz');
10
dezso