Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 为所有用户使用单个值(如果该值存在)更新列的所有值_Sql_Postgresql 9.6 - Fatal编程技术网

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版本的查询。谢谢!我接受了你的答案。