簡體   English   中英

使用TOP與自我加入進行更新

[英]Update using TOP versus self-join

根據外鍵的最小值更新表時,更有效的方法是什么?

在這種情況下,我將刪除設置了標志的行。 然后,我想在fk_id最小的行上設置標志

表格布局:

+----+------------+-----------+------------+
| id | fk_id      | fk_id2    | some_flag  |
+----+------------+-----------+------------+
|  1 | 21         | 1010101   |          1 |
|  2 | 22         | 1010101   |          0 |
|  3 | 23         | 1010101   |          0 |
|  4 | 24         | 1010101   |          0 |
+----+------------+-----------+------------+

我的方法是使用以下方法將表本身連接起來

Update t1
set some_flag = 1
From TableA t1
Left Join TableA t2
on t1.fk_id2 = t2.fk_id2 AND t1.fk_id > t2.fk_id
where t1.fk_id2 = 1010101 AND t2.fk_id2 IS NULL

我覺得這樣效率不高,必須有更好的方法。

考慮根據選擇語句進行更新,但這也許不是更好。 我認為對於具有很多字段的表,我的解決方案更差。

使用窗口功能:

with toupdate as (
      select a.*, row_number() over (partition by fk_id2 order by fk_id) as seqnum
      from table a
     )
update toupdate
    set some_flag = 1
    where seqnum = 1;

不需要jointop

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM