-1

クエリでランダムなレコードを取得するために、ランダムな順序で行を返すで提供されているソリューションを使用してみました。しかしNEWID()、フェッチしたい列のリストに追加する必要があります。そうしないと、追加できませんORDER BY NEWID()。残念ながら、結果セットに重複したレコードが含まれるようになります。

より明確にするために、このクエリでは、要求された列に NEWID() が存在するため、結果が重複します。

SELECT distinct top 4 
              Books.BookID,
              Books.Authors,                  
              Books.ShortTitle,               
              NEWID()                 
  FROM Books 
  inner join Publishers on Books.PublisherID = Publishers.PublisherID

  ORDER BY NEWID()

一意のレコードを取得しないというこの問題を解決するにはどうすればよいですか (ここでは BookID は PK です)。

4

2 に答える 2

4

各行に追加したくないことは間違いありません。newid()それは元に戻しますdistinct。代わりに、newid()`を使用group byします。order by

  SELECT top 4 b.BookID, b.Authors, b.ShortTitle              
  FROM Books b inner join
       Publishers p
       on b.PublisherID = p.PublisherID
  GROUP BY b.BookId, b.Authors, B.ShortTitle
  ORDER BY NEWID();

それはうまくいきます。リストにない値で並べ替えることができますselect

于 2014-02-24T19:49:16.323 に答える