使用子查询来拉随机值每次都会显示相同的值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用子查询来拉随机值每次都会显示相同的值相关的知识,希望对你有一定的参考价值。
我想使用T-SQL for Microsoft SQL Server 2008 R2向查询中的列添加随机值。为此,我使用子查询并拉随机记录。每次运行查询时,它都会提取一个新的随机记录,但每行的值都是相同的。
如何为每行获取新的随机值?
示例查询:
SELECT column1,
(SELECT TOP 1 column1 as c2 FROM Table2 ORDER BY NewID())
FROM Table1
而table2看起来像
column1
value1
value2
value3
它始终为column2返回相同的值,而不是每个表的新随机记录。
第一次运行:
column1, c2
1, value1
2, value1
3, value1
第二轮:
column1, c2
1, value2
2, value2
3, value2
如何让c2(子查询)为每一行提取一个新的随机记录?
理想情景:
column1, c2
1, value2
2, value1
3, value2
答案
尝试:
SELECT column1,
(SELECT TOP 1 column1 as c2 FROM Table2 WHERE Table1.column1 IS NOT NULL ORDER BY NewID())
FROM Table1
另一答案
你可以试试
SELECT T1.column1,
(SELECT TOP 1 column1 as c2 FROM Table2 ORDER BY NewID(), LEN(T1.column1))
FROM Table1 T1
强制它每次重新评估选择。但这将是非常低效的。也非常脆弱(没有LEN
它不起作用!)它是否满足你的要求,随机排序一次T2值(或者如果Table1大于Table2可能更多)然后通过row_number加入?
我可以通过这些方法看到的主要区别是,您当前的方法将允许多次选择相同的随机行,而我提出的方法不会。
以上是关于使用子查询来拉随机值每次都会显示相同的值的主要内容,如果未能解决你的问题,请参考以下文章