我之前发布了一个问题here
我认为一切都很好,花花公子,但当我去检查结果的随机性时,我发现没有。查询的其他方面工作正常,但我从表中获取top X
数字,无论我尝试做什么。由于SQL Server不允许您在子查询中使用order by子句,我如何解决这个问题以确保我获得真正的随机样本?
答案 0 :(得分:1)
只要指定ORDER BY
子句,就可以在子查询中使用TOP
。
旧技巧是在子查询中使用SELECT TOP 100 PERCENT ... ORDER BY NEWID()
来欺骗优化器实现子查询中间查询。
SQL优化器团队的高层人员已经说过,优化器现在知道将返回所有行而忽略它(虽然它仍然值得一试)
如果失败,请尝试SELECT TOP 2147483647 ... ORDER BY NEWID()
完成与TOP 100 PERCENT