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

only_full_group_byモードの利点は何ですか?

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



    1. MySQLの主キーでもある外部キーを作成するにはどうすればよいですか?

    2. データベースへのプリペアドステートメントの挿入-PSQL

    3. オラクルで大文字と小文字が区別される理由

    4. データベースメールアカウント(SSMS)を削除する