1. ホーム
  2. データベース
  3. mssql2008

SQL Server 2008のOrder byは、union句で直接利用できない

2022-01-08 01:03:07

要件によると、各上位20を取る、それはランダムなテイクなので、SQL Serverの順序newid()は、それだし、その上にすべてのデータの労働組合。だから、私はすぐに答えを与えた。

selecttop 20 *fromxxxwheretype=1orderbynewid() 

union 

selecttop 20 *fromxxxwheretype=0orderbynewid()


しかし、SQLクエリパーサーの種類は正しくありません、構文が間違っている、一見すると、私はそこに問題はないと思う、右か?

selecttop 20 *fromxxxwheretype=1orderbynewid() というのは、それ単体では問題ないのですが

次の半分の文も同じ構文構造で、エラーはありません。しかし、2つのクエリを一体化すると、間違ってしまうのです。それはおかしい。順序の近くに誤りがあることを示唆しているので、順序を削除することにします。

削除してもエラーにならずに動作しています。つまり、union句のクエリはSQL Server Order byを使用できないのですが、ここではorder byを使用しなければならず、そうでなければ20行をランダムに取得することはできません。

最終的に書き換えたのは

SELECT * FROM 

(select TOP 20 * from dbo.AngelExam where (c='none' or c=null) and (d='none' or d=null) ORDER BY newid() ) a1 

UNION 

SELECT * FROM 

(select TOP 20 * from dbo.AngelExam where (c='none' or c=null) and (d='none' or d=null) ORDER BY newid()) a2 

文が長くなるのはちょっと気持ち悪いですが、無理ですね。SQL Serverではなぜかunion句でorder byが使えないので、外側のレイヤーをラップする必要があるんです。

SQL Server 2008のOrder by in the union clauseに関するこの記事は、より関連するSQL Server 2008のOrder by in the union clauseを直接使用することはできませんが、BinaryDevelopの以前の記事を検索してくださいまたは次の関連記事を閲覧し続けるあなたは、将来的に多くをサポートすることを願っています!. BinaryDevelop!