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

MySQL:SQLエラー:1140、SQLState:42000

    次のクエリはONLY_FULL_GROUP_BYでは無効です 有効。選択リストの名前がGROUP BYで指定されていないため、最初の名前は無効です。 条項

    mysql> SELECT name, MAX(age) FROM t;
    ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...)
    

    GROUP BY句がない場合、GROUP列がないことは不正です

    クエリを書き直して、

    として正常に機能するようにすることができます
    mysql> SELECT name, MAX(age) FROM t GROUP BY name;
    

    または

    ONLY_FULL_GROUP_BY をオフにします エラーが消えるはずです。

    リンクが役立つ場合があります

    1. MySQLエラーを検索できますここ
    2. group-by-functions >
    3. stackoverflow.comへの同様の投稿
    4. 同様の問題が議論された別のフォーラム
    5. server-sql-mode

    更新

    これはあなたのコメントへの答えです。

    But i would like to know more about disabling the Group BY mode in mysql db.  
    

    サーバーSQLモード

    • MySQLサーバーはさまざまなSQLモードで動作でき、sql_modeの値に応じて、これらのモードをクライアントごとに異なる方法で適用できます。 システム変数。この機能により、各アプリケーションはサーバーの動作モードを独自の要件に合わせて調整できます。

    • サーバーの起動時にSQLモードを設定するには、--sql-mode="modes"を使用します コマンドラインのオプション、またはsql-mode="modes" my.cnf (Unix operating systems)などのオプションファイル内 またはmy.ini (Windows) 。 modeは、コンマで区切られたさまざまなモードのリストです。 SQLモードを明示的にクリアするには、--sql-mode=""を使用してSQLモードを空の文字列に設定します コマンドラインで、またはsql-mode="" オプションファイルで。

    • 実行時にSQLモードを変更するには、

      を使用します

      SET [GLOBAL|SESSION] sql_mode='modes'
      sql_modeシステム変数を設定するステートメント。 GLOBAL変数を設定するには、SUPER特権が必要です それ以降に接続するすべてのクライアントの動作に影響します。 SESSION変数の設定は、現在のクライアントにのみ影響します。すべてのクライアントは、いつでも独自のセッションsql_mode値を変更できます。

    • 現在のグローバル値またはセッションsql_mode値を判別するには、次のステートメントを使用します。

      SELECT @@GLOBAL.sql_mode;
      SELECT @@SESSION.sql_mode;

    • sql_modeテーブル を参照できます。

    I followed the manuals, Added the ONLY_FULL_GROUP_BY in sql-mode
    but no difference.  
    

    これは、MySQLのバージョンが原因で発生します。ローカルコンピュータのMySQLバージョンは何ですか?

    MySQLのバージョンを確認する方法は?

    mysql> SELECT version();
    +-----------+
    | version() |
    +-----------+
    | 5.5.28    |
    +-----------+
    1 row in set (0.00 sec)    
    

    sql_mode ONLY_FULL_GROUP_BYをテストする場合 、テーブルpatientを作成しました 2列のid, name 挿入されたレコード。 sql_mode ONLY_FULL_GROUP_BYを覚えておいてください はデフォルト設定ではありません。必要に応じて設定する必要があります。

    1)MySQLバージョン 5.0.45-community-nt

    SELECT name, MAX(id) FROM patient;
    ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause  
    

    失敗しました。sql_modeをONLY_FULL_GROUP_BYに設定しても意味がありませんでした。 GROUPBY句で指定されていない非集計列は許可されないためです。

    2)MySQLバージョン5.1.40-コミュニティ

    mysql> SELECT name, MAX(id) from patient;
    +----------+--------+
    | MAX(id)  | name   |
    +----------+--------+
    |       33 | aniket |
    +----------+--------+
    1 row in set (0.03 sec)  
    

    次に、sql_mode ONLY_FULL_GROUP_BYを設定した後

    mysql> set sql_mode = 'ONLY_FULL_GROUP_BY';
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> SELECT name, MAX(id) from patient;
    ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause  
    

    3)MySQLバージョン 5.5.28

    mysql> SELECT name, MAX(id) from patient;
    +----------+--------+
    | MAX(id)  | name   |
    +----------+--------+
    |       33 | aniket |
    +----------+--------+
    1 row in set (0.03 sec)  
    

    次に、sql_mode ONLY_FULL_GROUP_BYを設定した後

    mysql> set sql_mode = 'ONLY_FULL_GROUP_BY';
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> SELECT name, MAX(id) from patient;
    ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause  
    

    結論

    ご覧のとおり、クエリはバージョン5.0.45で失敗し、5.1.40および5.5.28以降で成功します。MySQLバージョンより前 5.1.10(わからない) GROUP BYなしのクエリ sql_mode ONLY_FULL_GROUP_BYに関係なく失敗します 設定するかどうか。

    いくつかの興味深いバグとsql_modeのよくある質問のリンク

    1. ONLY_FULL_GROUP_BYsqlモードは過度に制限されています
    2. sql-mode:完全なgroupbyモードのみが機能しない
    3. MySQL 5.0 FAQ:サーバーSQLモード


    1. Huawei GaussDB

    2. MySQLの画面にVimのようなKを表示するには

    3. SQLiteクエリ結果をコンマ区切りのリストとしてフォーマットする

    4. MariaDBでのLN()のしくみ