如何组合具有不同set和where子句的两个更新查询?

时间:2017-07-06 14:56:45

标签: mysql sql

如果可能,我希望通过组合这两个查询来优化数据库访问。

如何将这两个陈述合并为一个?

update tbl_priority SET a=1 where j='j1' and priority='1';
update tbl_priority SET g=1 where j='j1';

任何帮助,建议都非常感谢。

2 个答案:

答案 0 :(得分:3)

我没有看到很好的结合这两个更新语句的方法,因为WHERE子句中的逻辑不一致。但是,我们可以在j = 'j1'子句中保留常见条件WHERE,然后使用CASE表达式来处理a分配:

UPDATE tbl_priority
SET a = CASE WHEN priority = '1' THEN 1 ELSE a END,
    g = 1
WHERE j = 'j1'

请注意,这并不理想,因为我们有一个CASE表达式的分支,它将a赋予自身。这本身不应该导致特定记录显示为已被修改过。

答案 1 :(得分:1)

尝试

update tbl_priority SET g=1, a = CASE WHEN priority='1' THEN 1 ELSE a END 
where j='j1' ;