sql >> データベース >  >> RDS >> PostgreSQL

UNION、EXCEPT、またはINTERSECTを使用している場合のPostgreSQLの「エラー:テーブルのFROM句エントリがありません」を修正しました

    エラー:テーブルのFROM句のエントリがありません」というメッセージが表示された場合 UNIONなどの演算子を使用する場合のPostgreSQLの「」 、INTERSECT 、またはEXCEPT 、列名をテーブル名で修飾していることが原因である可能性があります。

    これを修正するには、テーブル名を削除するか、列エイリアスを使用します。

    エラーの例

    エラーを生成するコードの例を次に示します。

    (SELECT TeacherName FROM Teachers)
    UNION
    (SELECT StudentName FROM Students)
    ORDER BY Teachers.TeacherName ASC;

    結果:

    ERROR:  missing FROM-clause entry for table "teachers"
    LINE 4: ORDER BY Teachers.TeacherName ASC;

    この場合、結果をTeacherNameで並べ替えようとしました。 列ですが、その列をテーブル名で修飾しました(Teachers.TeacherNameを使用しました 列名を参照するため)。

    UNIONの結果を注文する場合、このようなテーブルの参照は機能しません 、EXCEPT 、またはINTERSECT

    ソリューション1

    この問題を修正する1つの方法は、ORDER BYからテーブル名を削除することです。 条項:

    (SELECT TeacherName FROM Teachers)
    UNION
    (SELECT StudentName FROM Students)
    ORDER BY TeacherName ASC;
    ソリューション2

    これを修正する別の方法は、列のエイリアスを使用することです:

    (SELECT TeacherName t FROM Teachers)
    UNION
    (SELECT StudentName FROM Students)
    ORDER BY t ASC;

    このオプションを使用して、列にエイリアスを割り当て、ORDER BYでそのエイリアスを参照します 条項。


    1. Heroku pg:pullがスキーマの入力に失敗する

    2. SQL Serverでは、列が参照されているすべての場所を見つけるにはどうすればよいですか?

    3. SQLServerの既存のテーブルにデフォルト値の列を追加します

    4. 結果セットを閉じた後、Oracleはカーソルを削除しません