1

我们有这四个表:

Store (
    row bigint,
    id uniqueidentifier,
    name varchar
)

Products (
    row bigint,
    id uniqueidentifier,
    storeID uniqueidentifier,
    productname varchar
)

Customer (
    row bigint,
    id uniqueidentifier,
    storeID uniqueidentifier,
    fName,
    lName,
    email
)

orders (
    row bigint,
    id uniqueidentifier,
    store_ID uniqueidentifier,
    cust_id uniqueidentifier,
    prod_id uniqueidentifier,
    date datetime
)

我们需要在特定商店的订单表中找到 30 个随机行。

这是我的第一次尝试:

  select TOP 30 * from orders o inner join store s on o.Retailer_ID=s.ID
    where s.Name='XXXX' and  o.Row in (select  ABS(CAST(CAST(NEWID() AS      
               VARBINARY) AS int)) %100000  from orders) and o.Retailer_ID =(select ID 
                  from store s where s.Name= 'XXXX')

但我对结果并不满意,因为我觉得行的范围永远不会是个位数,而且我所做的随机计算在创建从第 1 行到最大行的真正随机数方面似乎不太好-数字。首先,我不确定订单表中有多少行,这可能是另一个问题。

有没有更好的方法来查找表中的随机行?

4

2 回答 2

4

事情要简单得多。

   select TOP 30 *
    from orders o 
         join store s on o.Retailer_ID=s.ID
    where s.Name='XXXX'
    order by newid()
于 2013-08-29T00:54:21.170 回答
3

你也可以这样做:

select TOP 30 *
from orders o inner join
     store s
     on o.Retailer_ID = s.ID
where s.Name='XXXX'
order by newid();

这是通过随机排序数据然后选择前 30 行来返回随机行。在 SQL Server 中,排序依据newid()是一种对数据进行随机排序的方法。

于 2013-08-29T00:52:49.230 回答