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

同じselectでの列エイリアスの使用がOracleとMysqlでサポートされていないのはなぜですか?

    クエリ選択リストでエイリアスを使用して、列に別の名前を付けることができます。 GROUP BYでエイリアスを使用できます 、ORDER BY 、またはHAVING 列を参照する句:

    SELECT SQRT(a*b) AS root FROM tbl_name
      GROUP BY root HAVING root > 0;
    
    SELECT id, COUNT(*) AS cnt FROM tbl_name
      GROUP BY id HAVING cnt > 0;
    
    SELECT id AS 'Customer identity' FROM tbl_name;
    

    標準SQLでは、WHEREの列エイリアスへの参照は許可されていません 句。この制限が課せられるのは、WHERE 句が評価されますが、列の値がまだ決定されていない可能性があります。たとえば、次のクエリは不正です:

    SELECT id, COUNT(*) AS cnt FROM tbl_name
      WHERE cnt > 0 GROUP BY id;
    

    WHERE 句は、GROUP BYに含める行を決定します ただし、行が選択され、GROUP BYによってグループ化されるまでわからない、列値のエイリアスを参照します。 。

    クエリの選択リストで、引用符で囲まれた列のエイリアスは、識別子または文字列の引用符で囲まれた文字を使用して指定できます。

    SELECT 1 AS `one`, 2 AS 'two';
    

    ステートメントの他の場所では、エイリアスへの引用符で囲まれた参照は識別子の引用符を使用する必要があります。そうしないと、参照は文字列リテラルとして扱われます。たとえば、このステートメントは、エイリアスaを使用して参照される列IDの値でグループ化されます。 :

    SELECT id AS 'a', COUNT(*) AS cnt FROM tbl_name
      GROUP BY `a`;
    

    ただし、このステートメントはリテラル文字列'a'でグループ化され、期待どおりに機能しません。

    SELECT id AS 'a', COUNT(*) AS cnt FROM tbl_name
      GROUP BY 'a';
    

    出典: https://docs.oracle .com / cd / E17952_01 / refman-5.0-en / problem-with-alias.html



    1. Play2.4-Slick3.0.0-DELETEが機能しない

    2. mysql:テーブルをループし、テーブルの追加インデックスを変更します

    3. mysqlに複数の行を挿入する

    4. Postgresql列挙型の長所と短所は何ですか?