2017-01-24 11 views
1

postgresqlを使用しています。company_namedepartment_name、その他のデータとdepartmentのカラムを持つテーブルAがあります。サブセレクトを使用して別のテーブルからテーブルを更新する

私は単にcompany_namedepartment_name、およびdidで別のテーブルBを持っています。 (これは2つのテーブルの間に関係がありますが、構文を簡単にするためにそこからビューを作成しました)

一致する名前の行のA.departmentB.didを設定します。これは正規化プロセスの一部です。

このQ&Aによると、私が試した:

UPDATE A 
SET department=did 
FROM A AS A 
INNER JOIN B 
    ON A.company_name = B.company_name AND A.department_name=B.department_name; 

しかし、私はすべての行に対してA.departmentが同じ値に設定されていること、その結果を取得します。

(私もhereから異なる構文を試してみましたが、期待通りに構文エラーを取得しています。)

行が正しく一致していない理由はなぜ、より具体的にその作業ではありませんと。その参加にSELECTを試してみると、私は期待される結果を得ています。

のPostgresでは
+0

リンク先の両方の質問は、Postgres用ではなく、 –

+0

Ysです。私は文法上のわずかな違い以上のものは期待していませんでした。 –

答えて

1

、あなたはこのようなクエリを書きたい:

UPDATE A 
    SET department = B.did 
FROM B 
WHERE A.company_name = B.company_name AND 
     A.department_name = B.department_name; 

あなたはFROM句でAテーブルに言及するとき、テーブルとは何の関係もAから別のリファレンスではありません更新中です。簡単な解決策は、テーブルを1回だけ参照することです。

+0

うわー、私はこれを試してみませんが、これは動作します!すばらしいです! –

+2

@ AminNegm-Awad:これも[マニュアルに記載されています](https://www.postgresql.org/docs/current/static/sql-update.html): "*ターゲットテーブルは、 from_list、自己参加を希望しない限り* " –

+0

追加情報ありがとうございます。 Q&Aで見つけたのと同じような方法で試してみましたが、それはわかりやすいものでした。したがって、私は純粋な構文上の問題を抱えていると推測し、ドキュメントのヒントを見ていませんでした。 –

関連する問題