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、标志和级别的索引