对数百万行进行大规模更新有问题。下面是我尝试做的例子。如果可能的话,尽量避免案例陈述,因为有1000多个等级。
表1:
id, score, rank
1 4090 null
2 6400 null
3 8905 null
4 2551 null表2:
Rank, Score
1 0
2 1000
3 3500
4 5000
5 8000
6 10000我试图更新表1以显示正确的级别。
例: 6400分的ID2分数在5000以上,但低于8000,所以是4级。如果没有案例说明,这可能吗?
发布于 2017-07-05 22:02:50
您可以使用cross apply
update t1
set rank = t2.rank
from table1 t1 cross apply
(select top 1 t2.*
from table2 t2
where t2.score <= t1.score
order by t2.score desc
) t2;对于数以百万计的行,我建议如下之一:
case语句。“数百万”的更新通常是非常昂贵的操作。
发布于 2017-07-05 22:08:39
另一种选择是使用一个简单的连接,并与铅()协同使用。
示例
Update Table1 Set Rank=B.Rank
From Table1 A
Join (
Select Rank
,R1=Score
,R2=Lead(Score,1,999999) over (Order By Score)
From Table2
) B on A.score >= B.R1 and A.Score < B.R2 返回
id score rank
1 4090 3
2 6400 4
3 8905 5
4 2551 2https://stackoverflow.com/questions/44936657
复制相似问题