我有两个数据无关的表对于表A中的每一行,我想要例如表B中的3个随机行
使用游标很容易,但是速度很慢
那么我如何在单个语句中表达这一点以避免RBAR?
要获得介于0到(N-1)之间的随机数,可以使用。
abs(checksum(newid())) % N
这意味着要获得1-N的正值,您可以使用
1 + abs(checksum(newid())) % N
注意:RAND()不起作用-每个查询批处理一次,并且您在tableA的所有行都使用相同的值。
RAND()
查询:
SELECT * FROM tableA A JOIN (select *, rn=row_number() over (order by newid()) from tableB) B ON B.rn <= 1 + abs(checksum(newid())) % 9
(假设您希望每个A最多有9个B随机行)