他の行の値に基づいて、特定の列が空の行を更新する方法が不思議です。postgres - 他の行に基づいて行を更新する
Iは、以下の2行の値と最初の行の列(USER_NAME、データベース名、connection_from)を更新します。 session_idは同じです。
ありがとうございました。
他の行の値に基づいて、特定の列が空の行を更新する方法が不思議です。postgres - 他の行に基づいて行を更新する
Iは、以下の2行の値と最初の行の列(USER_NAME、データベース名、connection_from)を更新します。 session_idは同じです。
ありがとうございました。
更新する値をどのように選択するかは、むしろ曖昧です。これの重要な部分は、あなたが収集しようとしているデータを理解することである
update t
set user_name = coalesce(t.user_name, tt.user_name),
database_name = coalesce(t.database_name, tt.database_name),
connection_from = coalesce(t.connection_from, tt.connection_from)
from (select session_id, max(user_name) as user_name,
max(database_name) as database_name,
max(connection_from) as connection_from
from t
group by session_id
) tt
where t.session_id = tt.session_id and
(t.user_name is null or t.database_name is null or t.connection_from is null);
ありがとうございます。ほとんど働いた。 connection_from列は更新されませんでした。小さなキャッチ。 connection_from列はNULLのように見えますが、select *を発行するときはconnection_fromがnullで、行は返されません。私を導くことができますか?再度、感謝します。 – vignesh28
@ vignesh28。 。 。 'coalesce()'を 'case。t.connection_from> ''のように置き換え、次にt.connection_from else tt.connection_from end)'と置き換えます。 –
、ではない:私はあなたが
session_id
に基づいてデータを見ていると、すべての非NULL値は、これらの3つの列のために働くだろうと仮定しましょう更新そのもの。必要なデータを選択する方法を理解していれば、UPDATEは簡単です。テーブル定義(特に主キー)の詳細を知らなくても、私はより具体的にすることはできません。 ところで、接続情報をconnection_ip inetおよびconnection_port intとして保存することを検討する必要があります。 inet型には強力な演算子がいくつかあります。 –