如何在SQL中从另一个表的列生成随机值?
到目前为止,我已经能够得到这个提供这些结果的查询: 但我仍然存在的问题是,这些结果对于每一行都是随机的,而不是所有行的值都是常量 所以我的问题是,如何使所有行随机,而不是使整批具有固定的随机值如何在SQL中从另一个表的列生成随机值?,sql,sql-server,Sql,Sql Server,到目前为止,我已经能够得到这个提供这些结果的查询: 但我仍然存在的问题是,这些结果对于每一行都是随机的,而不是所有行的值都是常量 所以我的问题是,如何使所有行随机,而不是使整批具有固定的随机值 SELECT firstname ,lastname ,date_of_birth ,corp_name ,country_name FROM person CROSS JOIN corporation WHERE corp_name IN ( SELECT
SELECT firstname
,lastname
,date_of_birth
,corp_name
,country_name
FROM person
CROSS JOIN corporation
WHERE corp_name IN (
SELECT TOP 1 corp_name
FROM corporation
ORDER BY newid()
)
问题是过度优化。子查询只计算一次,即使它具有非确定性逻辑。我认为这是一个bug,但我猜微软有一些复杂的理由认为这不是bug 在任何情况下,我发现关联子句通常可以解决这一问题:
select p.firstname, p.lastname, p.date_of_birth,
c.corp_name, c.country_name
from person p cross apply
(select top (1) c.*
from corporation c
where p.firstname <> c.corp_name -- or whatever
order by newid()
) c;
注意,这使用交叉应用作为进一步的简化