2016-07-13 7 views
0

bx_tempのmin_failedがテーブルの現在のmin_failedの値より小さい場合、テーブルを更新しようとしています。Postresqlで更新を行うときにカラムがあいまいです

私のケースステートメントのmin_failedを参照して、 "min_failed is ambiguous"を取得し続けます。私はそれにもテーブルエイリアスを割り当てることはできません。

with c as (select * from b_temp) 
    update table b 
    set min_failed = (select case when ct.min_failed < min_failed then ct.min_failed else min_failed end) 
    from c 
    where c.user = b.user 

答えて

2

私はクエリをテストすることはできないんだけど、あなたはそうのようにそれを修正することができます。

WITH c AS (SELECT * FROM b_temp) 
UPDATE table b 
SET min_failed = LEAST(c.min_failed,b.min_failed) 
-- Use LEAST() instead of case logic. Also fixes your error because you were using SELECT without a FROM 
FROM c 
WHERE c.user = b.user; 
+0

働いた、ありがとうございました。 LEAST関数はNULLを除外しますか?すでに値がある場合はNULLを設定する必要はありません。 – c3win90

+0

@ c3win90 - ドキュメントごと: "すべての式がNULLに評価された場合のみ、結果はNULLになります。" https://www.postgresql.org/docs/current/static/functions-conditional.html – Nicarus

関連する問題