313 文字
2 分
PostgresSQLエラー「invalid reference to FROM-clause entry for table "テーブル名"」の解決方法
症状
NOTEこの記事のSQL文は説明用に例として作成したものであり、実際にエラーがおきたテーブル名やカラム名、構造などが異なります。
PostgreSQLで以下のようなSQL文を実行した際に「invalid reference to FROM-clause entry for table “a”」というエラーが発生しました。
UPDATE users AS uSET status = 'active'FROM events AS eLEFT JOIN items AS i ON u.id = i.user_id -- ← ここが原因:UPDATE対象(u)をJOIN句で参照している AND e.type = i.typeWHERE u.score > 100;
原因
このエラーはUPDATE対象のテーブルがFROM句に含まれてしまっていると発生します。今回の場合、FROM区にはeventsが含まれていますが、LEFT JOINでitemsを結合するときにusersも参照してしまうため、エラーが発生しました。
解決策
FROM句にUPDATE対象のテーブルを含めないように修正します。以下のように、UPDATE文のFROM句からusersが入らないようにLEFT JOINをEXISTS句に変更しました。
UPDATE users AS uSET status = 'active'FROM events AS eWHERE u.id = e.user_id AND u.score > 100 AND EXISTS ( SELECT 1 FROM items AS i WHERE i.user_id = u.id AND i.type = e.type );