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

MySQLでUNIONを使用する場合の「エラー1222(21000):使用されるSELECTステートメントの列数が異なる」を修正

    UNIONを使用すると、「ERROR 1222(21000):使用されているSELECTステートメントの列数が異なります」というメッセージが表示されます。 MySQLクエリの句。これは、各SELECTによって返される列の数が原因である可能性があります。 ステートメントが異なります。

    たとえば、最初のSELECT ステートメントは2つの列を返す可能性がありますが、2番目のSELECT ステートメントは3を返します。

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

    エラーの例

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

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

    結果:

    ERROR 1222 (21000): The used SELECT statements have a different number of columns

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

    解決策

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

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

    SELECT TeacherName FROM Teachers
    UNION
    SELECT StudentName FROM Students;

    結果:

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

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

    SELECT TeacherId, TeacherName FROM Teachers
    UNION
    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      |
    +-----------+-------------+

    選択したオプションによって、異なる結果が得られる可能性があることに注意してください。これは、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. MySQLによると:ドキュメント#1045-ユーザー'root' @'localhost'のアクセスが拒否されました(パスワードを使用:NO)

    2. Access2016でデータベースをテンプレートとして保存する方法

    3. トランザクションでアップサート

    4. ビデオコンテンツをSQLiteデータベース(ビデオパスではなく)に保存する方法