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

时间:2014-05-29 14:22:45

标签: 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      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语句实现它?

2 个答案:

答案 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
)

SQL Fiddle demo

答案 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
                 );
相关问题