首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TSQL -基于第二个表中两个in之间的值的更新。

TSQL -基于第二个表中两个in之间的值的更新。
EN

Stack Overflow用户
提问于 2017-07-05 21:59:06
回答 2查看 39关注 0票数 1

对数百万行进行大规模更新有问题。下面是我尝试做的例子。如果可能的话,尽量避免案例陈述,因为有1000多个等级。

表1:

代码语言:javascript
复制
id, score, rank
1   4090   null
2   6400   null
3   8905   null
4   2551   null

表2:

代码语言:javascript
复制
Rank,  Score
 1      0
 2      1000
 3      3500
 4      5000
 5      8000
 6      10000

我试图更新表1以显示正确的级别。

例: 6400分的ID2分数在5000以上,但低于8000,所以是4级。如果没有案例说明,这可能吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-05 22:02:50

您可以使用cross apply

代码语言:javascript
复制
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语句。
  • 将输出放入新表,截断原始表,然后重新加载

“数百万”的更新通常是非常昂贵的操作。

票数 0
EN

Stack Overflow用户

发布于 2017-07-05 22:08:39

另一种选择是使用一个简单的连接,并与铅()协同使用。

示例

代码语言:javascript
复制
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 

返回

代码语言:javascript
复制
id  score   rank
1   4090    3
2   6400    4
3   8905    5
4   2551    2
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44936657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档