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

MySQLでUNIONを使用する場合の「エラー1250(42000):SELECTの1つからのテーブル「…」をグローバルORDER句で使用できない」を修正

    UNIONを使用しているときに、「ERROR 1250(42000):SELECTの1つからのテーブル「…」をグローバルORDER句で使用できません」というエラーが発生した場合 MySQLクエリの句。おそらく、列名をそのテーブル名で修飾しているためです。

    これはMySQLでは機能しません。

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

    エラーの例

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

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

    結果:

    ERROR 1250 (42000): Table 'Teachers' from one of the SELECTs cannot be used in global ORDER clause

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

    MySQLでは、UNIONの結果を並べ替えるときに、この方法でテーブルを参照することはできません。 操作。

    ソリューション1

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

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

    結果:

    +-------------+
    | TeacherName |
    +-------------+
    | Ben         |
    | Bill        |
    | Cathy       |
    | Ein         |
    | Faye        |
    | Jet         |
    | Spike       |
    | Warren      |
    +-------------+
    ソリューション2

    前のオプションが適切でない場合、問題を修正する別の方法はエイリアスを使用することです。つまり、列にエイリアスを割り当ててから、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 |
    +--------+

    1. 既存のスキーマからテーブル関係図を生成する(SQL Server)

    2. SQLite左結合

    3. 複数の列にわたるDISTINCTのカウント

    4. 暗号化を利用してPostgreSQLデータベースのセキュリティを強化する