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

MySQLでUNIONを使用する場合の「エラー1054(42S22):「order句」の不明な列「…」」を修正

    UNIONを使用しているときに、エラー「1054(42S22):「orderclause」の不明な列「…」」が発生した場合 MySQLの句の場合、エイリアス列をその列名で参照しようとしていることが原因である可能性があります。

    UNIONを使用する場合 MySQLの句。列にエイリアスがある場合は、そのエイリアスをORDER BYで使用する必要があります。 その列を参照する句。

    したがって、エラーを修正するには、必ずそのエイリアスで列を参照してください。または、エイリアスを削除して列名を直接参照することもできます。

    エラーの例

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

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

    結果:

    ERROR 1054 (42S22): Unknown column 'TeacherName' in 'order clause'

    ここでは、TeacherNameで結果を並べ替えようとしました 列ですが、その列にはエイリアスがあります。 ORDER BYでエイリアスを使用しなかったという事実 エラーを生成するには句で十分でした。

    ソリューション1

    この問題を修正する1つの方法は、ORDER BYでエイリアスを使用することです。 条項:

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

    結果:

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

    それで問題は解決しました。

    ソリューション2

    これを行う別の方法は、エイリアスを完全に削除することです。

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

    結果:

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

    1. SQLITEは読み取り専用データベースをバージョン1から2にアップグレードできません

    2. 拡張機能を再配置不可にする方法は?

    3. MicrosoftAccessクエリで計算フィールドを作成する方法

    4. CASCADE DELETEを有効にするためにテーブルを編集するにはどうすればよいですか?