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

エラーの修正:SQLiteの「UNIONの左右のSELECTには同じ数の結果列がありません」

    UNIONを使用しようとすると、「エラー:準備中に、UNIONの左右のSELECTに同じ数の結果列がありません…」というメッセージが表示されます。 SQLiteの演算子、これはSELECTの1つが原因です ステートメントは他のステートメントよりも多くの列を返しています。

    UNIONを使用する場合 演算子、両方SELECT ステートメントは同じ数の列を返す必要があります。

    この問題を修正するには、SELECTを確認してください ステートメントは同じ数の列を返します。

    エラーの例

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

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

    結果:

    Error: in prepare, SELECTs to the left and right of UNION do not have the same number of result columns (1)

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

    解決策

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

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

    SELECT TeacherName FROM Teachers
    UNION
    SELECT StudentName FROM Students;

    結果:

    TeacherName
    -----------
    Ben        
    Bill       
    Cathy      
    Ein        
    Faye       
    Jet        
    Spike      
    Warren     

    または、最初のSELECTに別の列を追加することもできます ステートメント:

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

    結果:

    TeacherId  TeacherName
    ---------  -----------
    1          Faye       
    1          Warren     
    2          Ben        
    2          Jet        
    3          Cathy      
    3          Spike      
    4          Cathy      
    4          Ein        
    5          Bill       
    5          Warren     
    6          Bill       
    >

    選択したオプションに応じて、異なる結果が得られる可能性があることに注意してください。これは、UNION デフォルトで個別の行を返します。別の列を追加すると、追加の列の値によっては、以前に複製された行が一意の行になる可能性があります。

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

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

    結果:

    TeacherId  TeacherName
    ---------  -----------
    1          Warren     
    2          Ben        
    3          Cathy      
    4          Cathy      
    5          Bill       
    6          Bill       
    1          Faye       
    2          Jet        
    3          Spike      
    4          Ein        
    5          Warren     
    6          Bill      

    1. スクリプトが機能する場合、Postgres now()のタイムスタンプは変更されません

    2. MySQLで大文字と小文字を区別するように

    3. 競合を追加したにもかかわらず、postgresのシリアルが増加しています何もしません

    4. dockerおよびdocker-composeの複数のデータベース