1. ホーム
  2. sql

[解決済み] Postgres: テーブルのFROM句のエントリがありません。

2022-02-11 07:55:51

質問

Postgresの4つのテーブルに対して結合クエリを実行しようとしています。

テーブル名

  • scenarios_scenario
  • payments_invoice
  • payments_payment
  • payments_action

(これらの奇妙な名前はすべてdjangoが生成したものです -)))

関係です。

  • scenarios_scenario [多数あり] payments_action s
  • payments_action [1つ] payments_invoice
  • payments_action [1つ] payments_payment

以下は、動作中のクエリです。

SELECT payments_invoice.*,
    (payments_payment.to_be_paid - payments_payment.paid) as remaining, \
    payments_action.identificator
FROM payments_invoice
JOIN payments_payment
  ON payments_invoice.action_id = payments_payment.action_id
  AND payments_payment.full_payment=2
JOIN payments_action
  ON payments_invoice.action_id = payments_action.id
  AND payments_action.identificator = %s

私は別のテーブルから関連するフィールドを取得したいだけで、別のクエリを次のように書きました。

SELECT 
  scenarios_scenario.title, payments_invoice.*, \
  (payments_payment.to_be_paid - payments_payment.paid) as remaining, \
  payments_action.identificator, payments_action.scenario_id 
FROM payments_invoice 
JOIN scenarios_scenario 
  ON scenarios_scenario.id = payments_action.scenario_id
JOIN payments_payment 
  ON payments_invoice.action_id = payments_payment.action_id 
  AND payments_payment.full_payment=2 
JOIN payments_action 
  ON payments_invoice.action_id = payments_action.id 
  AND payments_action.identificator = 'EEE45667';

しかし、このエラーに直面しました。

ERROR:  missing FROM-clause entry for table "payments_action"
LINE 2: ...IN  scenarios_scenario ON scenarios_scenario.id = payments_a...
                                                             ^

このような類似の質問がないか、SO全体で探してみました( テーブルのFROM句の項目がない しかし、方法は見つかりませんでした。何かお手伝いいただけると幸いです。

解決方法は?

最初の結合では、「payment_action」は既知の関係ではありません。新しいjoinが既に「定義された」リレーションのみを使用するようにjoinを並べ替えてください。

以下は、この問題を説明するためのフィドルです。

http://sqlfiddle.com/#!17/ed147/5