gpt4 book ai didi

sql - 简单的更新语句,以便为所有行分配不同的值

转载 作者:行者123 更新时间:2023-12-04 16:08:22 27 4
gpt4 key购买 nike

出于测试目的,我正在尝试将一个表中的列设置为随机外键。我尝试使用以下查询

update table1 set table2Id = (select top 1 table2Id from table2 order by NEWID())

这将随机获得一个 table2Id 并将其分配为 table1 中每一行的外键。这几乎是我想要的,但我希望每一行都获得不同的 table2Id 值。

我可以通过遍历 table1 中的行来做到这一点,但我知道有一种更简洁的方法。

最佳答案

在一些测试台上,你的原始计划如下所示。

Original Plan

它只计算一次结果并将其缓存在 sppol 中,然后重放该结果。您可以尝试以下操作,以便 SQL Server 将子查询视为相关并且需要重新评估每个外部行。

UPDATE table1
SET table2Id = (SELECT TOP 1 table2Id
FROM table2
ORDER BY Newid(),
table1.table1Id)

对我来说,这个计划没有线轴。

New Plan

重要的是关联 table1 中的唯一字段,因此即使添加了一个线轴,它也必须始终被反弹而不是重绕(重放最后一个结果),因为相关值将是每一行都不一样。

如果表很大,这会很慢,因为所需的工作是两个表行的乘积(对于 table1 中的每一行,它需要对 table2)

关于sql - 简单的更新语句,以便为所有行分配不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12922202/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com