2017-12-25 11 views
0

SQLの現在の質問に対する回答が見つかりませんので、誰かが私を助けてくれることを願っています。SQLProまたはPostgreSQL以前の行の値に基づいて行を更新しています

私はクライアントとしてSQLProでMySQLを使用していますか私は、私が以前not null valuenull値を更新しようとしているのPostgreSQL pgAdminで4

シナリオを使用することができます。ここ

は私のテーブルです:

address/IDグループ化は私の列の下に一定のままとなるよう、私は not null valuesnull値を移入するにはどうすればよい
primary_id name address id 
1   bob 123 main 100 
2   jane 123 main NULL 
3   mike 217 2nd 200 
4   jeff 217 2nd NULL 

enter image description here

ありがとうございます!

答えて

0

あなたがテーブルを更新する場合、これはPostgresの中で動作します:MySQLで

update t 
    set id = (select t2.id 
       from t t2 
       where t2.address = t.address and t2.id is not null 
       fetch first 1 row only 
      ) 
    where id is null; 

、これは動作します:

update t join 
     (select address, max(id) as max_id 
     from t 
     group by address 
     ) tt 
     on t.address = tt.address 
    set t.id = tt.max_id 
    where t.id is null; 
+0

こんにちは、私はあなたのソリューションが動作するように取得しようとしてきたし、それが作業を行いながら、私の例のテーブルでは、実際のテーブルでは機能しません.... 私のクエリは: ファミリを更新する(home_street、max(account_id)をmax_idとしてfamily_streetによってファミリグループから選択)tt on family.home_street = tt.home_street set family.account_id = tt.max_idここでfamily.account_idはnullです。 エラーはありませんが、何も更新されていません... account_idの値は以下のようになります:0011I00000EWWDD テーブルには約78列あります。 何が間違っていますか? ありがとうございます! @DavidO。 – DavidO

+0

。 。 。アドレスは*同じに見えますが、まだ異なっているかもしれません - 文字セットが使用されているからです。 –

+0

感謝します!助けをありがとう! – DavidO

0

あなたは自分自身でテーブルを更新してみてください。私はpostgresの中で作成したユーザーテーブルにあなたのテーブルを挿入:

UPDATE users 
    SET 
    id = _users.id 
FROM 
(
    SELECT DISTINCT 
    address, 
    id 
    FROM users 
    WHERE id IS NOT NULL 
    GROUP BY 
     address, 
     id 
) _users 
WHERE 
    _users.address = users.address 
    AND users.id IS NULL; 

だから、アイデアは、私が(と仮定したアドレスが常に同じIDとペアリングされているすべてのすべての非ヌルアドレスとidグループつかむことです私は呼んでいます。この_users。あなたの元users.addressと

マッチ_users.address。あなただけのNULL users.idを更新していることを確認してください。

+0

面白いありがとう! – DavidO

+0

ありがとう!これは、postgresの魅力のように働いて助けに感謝! – DavidO

関連する問題