313 文字
2 分
PostgresSQLエラー「invalid reference to FROM-clause entry for table "テーブル名"」の解決方法
2025-08-02

症状#

NOTE

この記事のSQL文は説明用に例として作成したものであり、実際にエラーがおきたテーブル名やカラム名、構造などが異なります。

PostgreSQLで以下のようなSQL文を実行した際に「invalid reference to FROM-clause entry for table “a”」というエラーが発生しました。

UPDATE users AS u
SET status = 'active'
FROM events AS e
LEFT JOIN items AS i
ON u.id = i.user_id -- ← ここが原因:UPDATE対象(u)をJOIN句で参照している
AND e.type = i.type
WHERE u.score > 100;

原因#

このエラーはUPDATE対象のテーブルがFROM句に含まれてしまっていると発生します。今回の場合、FROM区にはeventsが含まれていますが、LEFT JOINでitemsを結合するときにusersも参照してしまうため、エラーが発生しました。

解決策#

FROM句にUPDATE対象のテーブルを含めないように修正します。以下のように、UPDATE文のFROM句からusersが入らないようにLEFT JOINをEXISTS句に変更しました。

UPDATE users AS u
SET status = 'active'
FROM events AS e
WHERE 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
);