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

only_full_group_byでクエリグループを修正する方法

    これはMySQLユーザーによくあるエラーです。 MySQL 5.7では、デフォルトで、データベースは他のほとんどのSQLデータベースが何年にもわたって実施してきた標準的なセマンティクスを実施します。

    ルールは、選択リストのすべての列が次のいずれかである必要があるということです。

    • GROUPBY句で指定されています。つまり、それはあなたがグループ化しているものです。
    • MIN、MAX()、SUM()、GROUP_CONCAT()などの集計関数の内部
    • グループ化する列に機能的に依存します(これはMySQLの標準SQL動作への拡張であり、他のSQLデータベースは必ずしもこれをサポートしていません)。

    クエリで(SELECT *を展開します ):

    select user_id, feature_key, feature_value from user_features
    where user_id = 1
    group by feature_key
    

    feature_keyでグループ化していますが、これは、他の列が上記のルールに準拠していないことを意味します。

    これを修正する方法は次のとおりです:

    select MAX(user_id), feature_key, GROUP_CONCAT(feature_value)
    from user_features
    where user_id = 1
    group by feature_key
    

    MAX(user_id)を使用するのは冗長に見えるかもしれません WHERE句の条件に基づいて可能な値は1つしかないためです。しかし、害もありません。 MIN(user_id) も機能します。

    この同じエラーに関する私の過去の回答も参照してください:




    1. ORを使用して複数のLEFTJOINを作成し、複合インデックスを完全に使用するにはどうすればよいですか? (パート2)

    2. SQL Serverの.bakファイルをMySQLにインポートする方法は?

    3. android.database.sqlite.SQLiteCantOpenDatabaseException:不明なエラー(コード14):データベースを開くことができませんでした

    4. フォームの検証