2017-07-21 48 views
0

私はまだPostgresには新しく、一般的にデータベースを扱っています。Postgresql - 別のカラムの値が一致したときに2つのテーブル間でカラムをコピーする

私は2つのテーブル(バルク、および選択)を持っている:私は何をしようとしていることは次のようです。各テーブルにidの列があり、という名前の列があり、テーブルに選択されている場合は、という名前の列があります。私がやろうとしています何

は、両方のテーブルにIDの値を比較することであり、それが一致した場合、最初のテーブルに新しい列に2つ目のテーブルから名前の値をコピーします。そうでない場合、値はNULLのままになります。新しい列はすでに作成されており、データを受け取る準備ができています。私は、次のことを試してみました:

select id, 
    CASE WHEN exists (select 1 from selected where bulk.id = selected.id) THEN selected.names 
    ELSE NULL 
    END 
AS name 
FROM bulk; 

私は、これは完全に理にかなっていないかどうかわからないんだけど、これは私が研究した後に得ることができる最も近いものです。私はこれを実行すると、私は次のエラーを取得しています:[42P01]エラー:FROM句のテーブルのエントリは、エラーが自明であるが、私はそれ

どれを解決する方法がわからない

を選択し行方不明助けていただければ幸いです! ありがとう

+0

このようにデータを選択しようとしているだけで、テーブルのデータを更新したいのですか? – Nicarus

+0

私は更新したいです。 idが一致したら、基本的に選択した名前からバルクにコピーする – Omar

答えて

0

カラムを更新する場合は、updateを使用してください。私は、テーブルを更新する必要がある上で失われたビットだけど、このような何か:あなたのselectについては

update secondtable t2 
     set name = t1.name 
    from firsttable t1 
    where t2.id = t1.id; 

、あなたはどうなる:

select b.id, 
     (select s.name from selected s where b.id = s.id) as name 
from bulk b; 

あなたはcaseは必要ありません。一致するものがなければ、戻り値はNULLです。

+0

助けてくれてありがとう。 提供した更新コードを試しているときに構文エラーが発生します。 2行目の直前。名前の前にSETを追加しようとしましたが、その直前の最後の行でエラーが発生しました – Omar

+0

Gordonのコードに構文エラーがあります。 'SET'が必要で、コード内で' ON'を 'WHERE'に変更する必要があります。 (私はこれらの修正で彼の答えを編集しました) – Nicarus

+0

ありがとうニカルス。 さて、私はすでにそれを試みています。しかし、私は非常に巨大なデータベースを扱っているので、これまでのところクエリを処理しています。 私はそれが働いたことを確認したら回答を更新します – Omar

関連する問題