2

私はこの質問に答えました: https://stackoverflow.com/a/18521684/1707323に似たクエリで:

SELECT
  *
FROM
  (
    SELECT
      *
    FROM
      table_name
    WHERE
      table_name.some_field='1' OR
      table_name.some_field='2'
    ORDER BY
      table_name.some_field
  ) sub_query
GROUP BY
  sub_query.primary_key_column

と、コメントが寄せられました

賢いアイデアですが、これは MySQL での動作が保証されておらず、SQL Server や他のほとんどのデータベース システムでハード エラーが発生します。Extensions to GROUP BYからの引用: 「サーバーは各グループから任意の値を自由に選択できるため、それらが同じでない限り、選択された値は不確定です。さらに、各グループからの値の選択は、ORDER BY を追加しても影響を受けません。句。

特定のバージョンの MySQL、特定のテーブルに対して、取得したクエリ プランによってクエリが期待どおりに正確に実行されるため、常に必要な結果が得られる可能性は十分にあります。しかし、不確定に値を選択すること、および ORDER BY がこのクエリを信頼できるものにするのに十分ではないことをドキュメントが明示的に述べている場合は、他のデータベースまたは MySQL の他のバージョンでこれを試すことに非常に慎重になります。

MySQl のマニュアルでも次のように述べられてSorting of the result set occurs after values have been chosen, and ORDER BY does not affect which values within each group the server chooses.います。

SELECT
  *
FROM
  table_name
WHERE
  table_name.some_field='1' OR
  table_name.some_field='2'
GROUP BY
  table_name.primary_key_column
ORDER BY
  table_name.some_field

しかし、それはサブクエリで order by 句を使用したクエリとは異なります。同様の質問を見つけましたが、サブクエリに ORDER BY 句が含まれていません

ORDER BYサブクエリの句がグループ化で常にそのグループの最初のインスタンスを使用するように強制するかどうかについて、MySQL マニュアルを参照して誰かがこれに光を当てることができますか?

編集:観察

FIFO や LIFOは、GROUP BY の操作方法と関係があるのではないでしょうか? 私は自分の心を包み込むことができません:

サーバーは各グループから任意の値を自由に選択できます

この選択には何らかの論理が必要です。コンピュータは、なんらかの指示がなければ、自分で選択することはできません。コンピューターが何の指令もなしに自分で選択を行うことができれば、コンピューティングの究極の目標である ARTIFICIAL INTELLIGENCE に真に到達したことになり、今ではコンピューターはアプリケーションに 1 つの指令を与えるだけですべてのコードを記述できるようになります。[LOL] これが文書化されていないロジックである可能性はどのくらいですか? ロジック内の RAND は、FIFO や FILO よりも多くの処理能力を必要としませんか? ここには、文書化されていないだけのロジックが含まれている必要がありますが、100% の確率で機能します。私がいつも好きだったのは、幾何学の証明です。それが正しいか間違っているかを証明しなければならないことを学びました。それがどのように機能するかは証明できますが、どのように機能しないかは見ていません。

4

1 に答える 1