我有两个数据不相关的表
对于表 A 中的每一行,我想要例如表 B 中的 3 个随机行
使用光标这相当容易,但速度非常慢
那么我该如何用单个语句来表达这一点以避免 RBAR 呢?
要获得 0 到 (N-1) 之间的随机数,可以使用。
abs(checksum(newid())) % N
这意味着要获得正值 1-N,您可以使用
1 + abs(checksum(newid())) % N
Note: RAND()
不起作用 - 每个查询批次都会评估一次,并且 tableA 的所有行都使用相同的值。
查询:
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 的随机行)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)