如果存在postgres则不更新

时间:2015-06-02 22:13:21

标签: sql database postgresql

我有一个对(uid,client_fact)有唯一约束的表。当我尝试更新 client_fact它会在约束上引发错误,这很明显,因为如果我说将client_fact更新为值2,其中user_id为1,并且如果已经存在这两列的组合,则会引发异常。但有什么方法可以跳过它并继续更新其他人。

我正在使用的查询是

UPDATE  user_ft
SET client_fact_id = 779,
WHERE client_fact_id in (select client_fact_id 
                         from user_ft 
                         where client_fact_id = 778 
                           and updated_date::date =< '2015-05-28') 
 and not exists (select uid ,client_fact_id 
                 from user_ft 
                 where  client_fact_id = 779)

我使用not exists子句来处理这个案例,我已经将用户和factid组合在一起了。它运行成功,但没有更新任何内容。

1 个答案:

答案 0 :(得分:0)

得到了...... 我们不需要使用不存在。 ..因为这会导致跳过所有行,我会查询我的查询以查看具有此组合的表中的用户是否不在查询中考虑该用户。见下面更正的查询

 UPDATE  user_ft SET client_fact_id = 779
 WHERE client_fact_id in (select client_fact_id from user_ft 
                           where client_fact_id = 778  and 
                           updated_date::date =< '2015-05-28') 
 and uid not in (select uid  
                 from user_ft 
                  where  client_fact_id = 779)

谢谢大家