我想为另一个表的每一行选择一个表的随机值.
我有以下代码:
SELECT T1.COL1,(SELECT TOP 1 t2.COL2 FROM T2 ORDER BY NEWID())FROM T1
Run Code Online (Sandbox Code Playgroud)
我理解它不起作用的原因.它从T2中选择一个随机值,但从T1中选择的每一行都是相同的.
谢谢.
这是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计算每行的子查询.如果没有这个,就像在原始查询中一样,子查询被计算一次,然后被缓存.
| 归档时间: |
|
| 查看次数: |
140 次 |
| 最近记录: |