2017-04-13 50 views
0

更新我有这样的查询不能与case语句

update mst_doc_proc_list set is_display = 0, is_mandatory = 1, is_deleted = case 
    when (is_display = 1 and is_mandatory = 1) then 1 else 0 end 
    where eff_date = '11/4/2017'; 

当我第一次执行刚刚is_displayis_mandatory更新。
我必须执行两次才能更新查询中的所有内容。我应该如何在单次执行中运行这些查询?

+0

您能否详细说明您正在尝试做什么?在执行任何更新之前,什么是原始值?第一次执行更新后,您希望获得的预期结果是什么? – gvenzl

回答

0

is_displayis_mandatory在您的CASE语句中取当前行的值,而不是您的新值。

在您的示例查询中,您实际上有set is_display = 0这意味着您根本不需要case语句,也可以将其硬编码为0

在你真正的查询中,你使用绑定变量的值为is_displayis_mandatory?如果你是,那么使用这些值绑定变量在这两个点:

update mst_doc_proc_list set is_display = ?, is_mandatory = ?, is_deleted = case 
     when (is_display = ? and is_mandatory = ?) then 1 else 0 end 
     where eff_date = '11/4/2017'; 

另外,我可能把这个逻辑的代码,而不是SQL。

update mst_doc_proc_list set is_display = ?, is_mandatory = ?, is_deleted = ? 
     where eff_date = '11/4/2017';