使用子查询来拉随机值每次都会显示相同的值

Luc*_*cas 12 sql t-sql sql-server random

我想使用T-SQL for Microsoft SQL Server 2008 R2向查询中的列添加随机值.为此,我使用子查询并拉随机记录.每次运行查询时,它都会提取一个新的随机记录,但每行的值都是相同的.

如何为每行获取新的随机值?

示例查询:

SELECT column1,
    (SELECT TOP 1 column1 as c2 FROM Table2 ORDER BY NewID())
FROM Table1
Run Code Online (Sandbox Code Playgroud)

而table2看起来像

column1
value1
value2
value3
Run Code Online (Sandbox Code Playgroud)

它始终为column2返回相同的值,而不是每个表的新随机记录.

第一次运行:

column1, c2
1, value1
2, value1
3, value1
Run Code Online (Sandbox Code Playgroud)

第二轮:

column1, c2
1, value2
2, value2
3, value2
Run Code Online (Sandbox Code Playgroud)

如何让c2(子查询)为每一行提取一个新的随机记录?

理想情景:

column1, c2
1, value2
2, value1
3, value2
Run Code Online (Sandbox Code Playgroud)

Tho*_* Li 17

尝试:

SELECT column1,
    (SELECT TOP 1 column1 as c2 FROM Table2 WHERE Table1.column1 IS NOT NULL ORDER BY NewID())
FROM Table1
Run Code Online (Sandbox Code Playgroud)


Mar*_*ith 7

你可以试试

SELECT T1.column1,
    (SELECT TOP 1 column1 as c2 FROM Table2 ORDER BY NewID(), LEN(T1.column1))
FROM Table1 T1
Run Code Online (Sandbox Code Playgroud)

强制它每次重新评估选择.但这将是非常低效的.也非常脆弱(没有LEN它不起作用!)它是否满足你的要求,随机排序一次T2值(如果Table1大于Table2,可能更多)然后通过row_number加入?

我可以通过这些方法看到的主要区别是,您当前的方法将允许多次选择相同的随机行,而我提出的方法不会.