GROUP BY を使用しない集約クエリ: エラーと解決策について
以前のバージョンの MySQL では、集約クエリに対して GROUP BY 句を使用しないクエリがありました。関数 (COUNT() など) は、多くの場合、問題なく機能しました。ただし、MySQL 5.7.14 以降では、このようなクエリでエラーが発生する可能性があります:
SQLSTATE[42000]: Syntax error or access violation: 1140 In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column [...]
このエラーは、非集計フィールドを必要とする他の RDBMS システムに合わせて MySQL のデフォルト動作が変更されたことに起因します。集計関数を使用する場合、SELECT 句に GROUP BY 句に含めます。
エラーへの対処:
このエラーを解決するには、次の 2 つのオプションがあります。
1. MySQL 設定の調整:
MySQL の設定を変更することで、従来の動作に戻すことができます。ただし、これは最適でないクエリの実践を永続させることになるため、通常は推奨されません。
2.クエリを修正します:
推奨される解決策は、GROUP BY 句に非集計列を含めるようにクエリを変更することです。たとえば、上記のクエリは次のように書き換えることができます:
SELECT id, password, COUNT(id) AS count FROM users WHERE email = :email GROUP BY id, password LIMIT 1
Exception in 5.7.5 :
MySQL バージョン 5.7.5 以降では、依然として非集計列が 1 つの値に制限されている場合 (WHERE 句でフィルターを使用するなど)、GROUP BY 句から非集計列を除外できます。この例外の詳細と例は、ここでご覧いただけます。
以上がMySQL 5.7.14 で GROUP BY を使用しない集計クエリでエラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。