CASE在更新中

时间:2013-03-16 13:13:00

标签: mysql sql

我有这个UPDATE查询

 UPDATE table SET 
 col2 = ( CASE WHEN ( col1 <> 0 AND col2 = 0 ) THEN val1 ELSE col2 END ),  
 col1 = ( CASE WHEN ( col1 = 0 ) THEN val1 ELSE col1 END )

我的问题是该脚本的设置方式是一个用户可以访问两次,因此val1将在col1 and col2中。

如果val1已添加到val1col1,如果col2已添加到任一列中,则我需要先检查id col1 col2 1 val1 val1 2 val2 val2 ,然后再更新列。 val1 =用户ID 目前可能会发生这种情况,用户1和2都可以访问此更新脚本,因此如果他们中的任何一个访问它两次,他们的ID将被放置在col1和col2中,这是我的问题。

id  col1  col2  
 1   val1  val2     
 2   val2  val1

我想要这样的东西

{{1}}

如果val1存在于col1或col2中,则不需要更新。

1 个答案:

答案 0 :(得分:0)

试试这个

   UPDATE table SET 
   col2 = ( if ( col1 <> 0 AND col2 = 0 ) ,val2 , if ((col1 = 0 and col2 <> 0) , col2 , if ((col1 = 0 and col2 = 0) , val1 , col2)) ),  
   col1 = ( if ( col1 = 0  and col2 <> 0) , val2 , if ((col1 <> 0 and col2 = 0) , col1 , (if (col1 = 0 and col2 = 0),val1 , col1 )) )