1

私は次のクエリを実行しています:

SELECT DISTINCT column1, colum2 FROM table.... WHERE....

しかし、返される結果が正しいものであることを望んでいません。SQLがこの行をソートしないようにするにはどうすればよいですか?

4

3 に答える 3

9

それらはソート自体を取得していません。テーブルにあるインデックスを使用して戻っているか、テーブル全体をスキャンしているだけです。ランダムに並べ替えたい場合は、クエリで明示的に指定する必要があります。

SELECT *
FROM (SELECT DISTINCT column1, colum2 
      FROM table.... 
      WHERE....) A
ORDER BY NEWID()

フィドルのデモ

于 2013-02-01T16:15:11.380 に答える
1

SELECT DISTINCT(またはその他)にはORDER BYは必要ありません...どのような順序が表示されていますか?データがシステムに入力されたときに注文された可能性があります。

于 2013-02-01T16:18:22.170 に答える
1

select distinct重複する行を識別する必要があります。これを行うには、基本的に 2 つの方法があります。1 つは、データをソートすることです (これは、インデックスを使用して暗黙的に行うことができます)。次に、重複した行が隣り合わせに表示されます。もう 1 つは、ハッシュ テーブルを作成することです。重複する行が同じハッシュ バケットに表示されます。

クエリの場合、SQL Server はデータの並べ替えを選択しています。データが順序付けられているように見えます。マルチスレッド システムでは、データが並べ替えられているように見える場合がありますが、スクロールすると、並べ替えがチャンクになっていることがわかります (データは各スレッドから返されるため)。

于 2013-02-01T17:28:31.293 に答える