Tsql 如何编写一个sql来更新数据?

Tsql 如何编写一个sql来更新数据?,tsql,sybase,Tsql,Sybase,假设表中有如下数据: id level flag 1 1 0 1 2 0 1 3 1 1 4 0 1 5 1 1 6 0 1 7 0 1 8 1 1 9 1 1 10 0 2 1 0 2 2 0 2 3

假设表中有如下数据:

id    level  flag
1     1      0  
1     2      0  
1     3      1  
1     4      0  
1     5      1  
1     6      0  
1     7      0  
1     8      1  
1     9      1  
1     10     0     

2     1      0  
2     2      0  
2     3      0  
2     4      0  
2     5      1  
2     6      1  
2     7      1  

我想在标志的第一个1值之后将标志更新为0。例如,使用上述样本数据, 对于id=1,第一个标志值=1是级别=3,那么级别>3的所有标志值都应更新为0

对于id=2,应更新所有级别>5的标志=0


如何使用sql甚至一条sql语句来实现它?

您应该能够使用同一个表上的WHERE来实现这一点:

UPDATE t1
SET flag = 0
FROM TheTable t1
WHERE EXISTS (
    SELECT 1
    FROM TheTable t2
    WHERE t2.id = t1.id
    AND t2.level < t1.level
    AND t2.flag = 1
)
可以使用exists语句执行此操作:

update table t
    set flag = 0
    where exists (select 1
                  from table t2
                  where t2.id = t.id and
                        t2.level < t.level and
                        t2.flag = 1
                 );

谢谢。工作正常,但性能不好。此表中的行数超过10000000行。请尝试添加id、标志和级别的索引