如何在SQL中的select语句中分配随机值?

Cth*_*lhu 2 sql sql-server

我想为另一个表的每一行选择一个表的随机值.

我有以下代码:

SELECT T1.COL1,(SELECT TOP 1 t2.COL2 FROM T2 ORDER BY NEWID())FROM T1
Run Code Online (Sandbox Code Playgroud)

我理解它不起作用的原因.它从T2中选择一个随机值,但从T1中选择的每一行都是相同的.

谢谢.

Gor*_*off 5

这是SQL Server的棘手部分.在优化查询方面有点过于激进.您可以使用关联子句来阻止这种情况:

SELECT T1.COL1,
       (SELECT TOP 1 t2.COL2 FROM T2 where t1.col1 is not null ORDER BY NEWID() )
FROM T1
Run Code Online (Sandbox Code Playgroud)

added子句where t1.col1 is not null将强制SQL Server计算每行的子查询.如果没有这个,就像在原始查询中一样,子查询被计算一次,然后被缓存.