在pgsql中使用带有update子句的IF语句

时间:2016-06-10 11:56:18

标签: postgresql query-optimization

我想在更新中添加条件我真的不知道该怎么做。 我想做以下事情:

UPDATE 
    xyz_table
SET
    cap = some_text, IF (some_text IS NULL) THEN some_text = alternate_text ENDIF
WHERE
    alternate_text <> '' AND 
    cap IS NULL AND 
    some_relation_id IN ( 50, 51, 52  );

如果有任何方法可以做到这一点,请建议其他我认为我需要执行两次相同的查询才能实现此目的。 在此先感谢:)

3 个答案:

答案 0 :(得分:2)

您可以使用casecoalesce()。这是set声明:

SET cap = some_text, 
    some_text = COALESCE(some_text, alternate_text)

答案 1 :(得分:0)

应该这样做:

UPDATE 
    xyz_table
SET
    cap = some_text, some_text = (case when some_text IS NULL THEN alternate_text else some_text end)
WHERE
    alternate_text <> '' AND 
    cap IS NULL AND 
    some_relation_id IN ( 50, 51, 52  );

在运行

之前不要忘记BEGIN交易

答案 2 :(得分:0)

在您的特定示例中,最简单的方法是使用IsNull()。

UPDATE 
xyz_table
SET cap = ISNULL(some_text, alternate_text)
WHERE  alternate_text <> '' AND 
cap IS NULL AND 
some_relation_id IN ( 50, 51, 52  );

对于其他条件,我倾向于使用案例陈述。

UPDATE 
xyz_table
SET cap = CASE WHEN some_text = '' THEN alternate_text ELSE some_text END
WHERE  alternate_text <> '' AND 
cap IS NULL AND 
some_relation_id IN ( 50, 51, 52  );