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
を持つ行 。