only_full_group_by=オン MySQLエンジンに指示します:GROUP BYを適用しないでください どの結果を表示してエラーをスローするかについて疑問がある場合。 のみ Group Byの場合に適用します 具体的に何をすべきかを教えてくれます。つまり、Group By いっぱいで完璧です!
only_full_group_by=オフ MySQLエンジンに指示します:常にGROUP BYを適用します 選択する結果がわからない場合は、ランダムに1つ選択してください。
GROUP BYを使用する場合は、オフにする必要はありません。 きちんと!
例:
表:ユーザー
id | name
----------------
1 ali
2 john
3 ali
GROUP BYを使用する場合 nameに 列:
SELECT * FROM users GROUP BY name;
考えられる結果は2つあります:
1 ali
2 john
または
2 john
3 ali
MYSQLはどの結果を選択するかを知りません! idが異なるため ■ただし、両方にname=aliがあります 。
ソリューション1:
nameを選択するだけ フィールド:
SELECT name FROM users GROUP BY name;
結果:
ali
john
これは完璧なソリューションです。 GROUP BYを作成する列を削除する 混乱している。これは、自分が何をしているのかを知っていることを意味します。通常、これらの列は必要ありませんが、必要な場合は、ソリューション3にアクセスしてください。 !
ソリューション2:
only_full_group_byをオフにする 。 MYSQLは、2つの可能な結果のいずれかをランダムに選択します !! (idが何であるかを本当に気にしなくても大丈夫です 選択しますが、オンにすることを忘れないでください クエリの直後に、将来のgroupBysでの予期しない動作を防止します)
ソリューション3
Aggregateを使用する MIN()のような関数 、MAX() MYSQLが何を選択する必要があるかを決定するのに役立ちます。
例:
SELECT MAX(id), name FROM users GROUP BY name;
結果:
2 john
3 ali
aliを選択します 最大のidを持つ行 。