-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. 相反,使用group bynewid 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 回答
3

或者,如果您仍想使用 NEWID,只需在分配新 id 之前创建一个不同的列表:

SELECT a.BookID, a.Authors, a.ShortTitle FROM
(SELECT distinct top 4 
          Books.BookID AS BookID,
          Books.Authors AS Authors,                  
          Books.ShortTitle AS ShortTitle,                              
FROM Books 
inner join Publishers on Books.PublisherID = Publishers.PublisherID) a
ORDER BY NEWID()
于 2014-02-24T19:57:49.847 回答