假设我在表中有数据:
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是level = 3,那么级别> 3的所有标志值都应该更新为0.
对于id = 2,应更新所有级别> 5
的flag = 0如何用sql甚至一个sql语句实现它?
答案 0 :(得分:1)
您应该能够在同一张桌子上使用WHERE EXISTS
执行此操作:
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
)
答案 1 :(得分:0)
您可以使用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
);