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

PostgreSQLの「エラー:各EXCEPTクエリには同じ数の列が必要」を修正

    PostgreSQLのEXCEPTを使用する場合 演算子、「エラー:各EXCEPTクエリには同じ数の列が必要です」というエラーが発生した場合 「これは、EXCEPTのいずれかの側のクエリによって返される列の数に不一致があるためです。 オペレーター。

    これを修正する方法は、両方のSELECTを確認することです。 ステートメントは同じ数の列を返します。

    エラーの例

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

    SELECT TeacherName FROM Teachers
    EXCEPT
    SELECT StudentId, StudentName FROM Students;

    結果:

    ERROR:  each EXCEPT query must have the same number of columns
    LINE 3: SELECT StudentId, StudentName FROM Students;

    ここでは、最初のSELECT ステートメントは1つの列を返します(TeacherName )、ただし2番目のSELECT ステートメントは2つの列を返します(StudentId およびStudentName

    解決策

    解決策は、両方のSELECTを確認することです ステートメントは同じ数の列を返します

    上記の例を使用して、2番目のSELECTから余分な列を削除することができます ステートメント:

    SELECT TeacherName FROM Teachers
    EXCEPT
    SELECT StudentName FROM Students;

    結果:

     teachername 
    -------------
     Cathy
     Ben

    もう1つのオプションは、関連する列を最初のSELECTに追加することです。 ステートメント:

    SELECT TeacherId, TeacherName FROM Teachers
    EXCEPT
    SELECT StudentId, StudentName FROM Students;

    結果:

     teacherid | teachername 
    -----------+-------------
             3 | Cathy
             4 | Cathy
             1 | Warren
             5 | Bill
             2 | Ben

    この例が示すように、選択したオプションに応じて異なる行が返される可能性があります。

    EXCEPT ALLも使用できます 、重複する値を返します:

    SELECT TeacherId, TeacherName FROM Teachers
    EXCEPT ALL
    SELECT StudentId, StudentName FROM Students;

    結果:

     teacherid | teachername 
    -----------+-------------
             3 | Cathy
             4 | Cathy
             1 | Warren
             5 | Bill
             2 | Ben

    これにより、データに応じて、同じ結果または異なる結果が返される場合もあります。


    1. 修正:MySQL –SELECTコマンドがユーザーに拒否されました

    2. mysql:「文字列」を0と比較するとtrueになるのはなぜですか?

    3. YEAR()SQL Server(T-SQL)の例

    4. テーブルからデータ行を削除した後、MySQLInnoDBがディスクスペースを解放しない