Sql 为所有用户使用单个值(如果该值存在)更新列的所有值
我有这样的桌子:Sql 为所有用户使用单个值(如果该值存在)更新列的所有值,sql,postgresql-9.6,Sql,Postgresql 9.6,我有这样的桌子: ID | cur_val | done | res 1 | 10000 | false | false 2 | 20000 | false | false 3 | 30000 | false | false 1 | 40000 | false | false 3 | 60000 | false | false 1 | 10000 | true | false ID | cur_val | done | res 1 | 10000
ID | cur_val | done | res
1 | 10000 | false | false
2 | 20000 | false | false
3 | 30000 | false | false
1 | 40000 | false | false
3 | 60000 | false | false
1 | 10000 | true | false
ID | cur_val | done | res
1 | 10000 | false | true
2 | 20000 | false | false
3 | 30000 | false | false
1 | 40000 | false | true
3 | 60000 | false | false
1 | 10000 | true | true
我需要一个更新查询来更新res
列(默认情况下为false
),具体取决于done
列中的值。
具体而言,对于任何ID
,如果done
为true
,则与该ID
相关联的所有res
值都应更新为true
最后一个表应该如下所示:
ID | cur_val | done | res
1 | 10000 | false | false
2 | 20000 | false | false
3 | 30000 | false | false
1 | 40000 | false | false
3 | 60000 | false | false
1 | 10000 | true | false
ID | cur_val | done | res
1 | 10000 | false | true
2 | 20000 | false | false
3 | 30000 | false | false
1 | 40000 | false | true
3 | 60000 | false | false
1 | 10000 | true | true
非常感谢您的帮助。在
sql server
UPDATE t1
SET res = 1
FROM yourtable t1
WHERE EXISTS
(SELECT 1
FROM yourtable t2
WHERE t1.ID = t2.ID
AND done = 1)
在postgres
UPDATE yourtable t1
SET res = true
WHERE EXISTS
(SELECT 1
FROM yourtable t2
WHERE t1.id = t2.id
AND done = true)
;
您不应该存储这样的值,因为当用户来来去去去时,您的数据很快就会不一致。而是创建一个视图,它将始终是最新的@jarlh你能再解释一下吗?我对SQL非常陌生。请用您正在使用的数据库标记您的问题。您的查询会将所有
res
设置为true,而不仅仅是将其设置为id
,后者已完成=true
。这是一个执行示例。你能检查一下吗?谢谢@Arty I原始代码是为sql server编写的,我还添加了postgresql版本的查询。谢谢!我接受了你的答案。