mysql SET CASE WHEN THEN THEN WITH AND not expected result

时间:2014-05-23 04:32:09

标签: mysql

初始mysql表

 RowIdPaidusedUnique | TypeOfBookkeepingRecord 
 ---------------------------------------------
     1               |     45
     2               |     45
     3               |     4

查询

UPDATE 2_1_paidused 
SET TypeOfBookkeepingRecord = CASE RowIdPaidusedUnique 
WHEN ? THEN ? WHEN ? THEN ? 
AND TypeOfBookkeepingRecord <> ? 
END;          

数组是

Array
(
[0] => 1
[1] => 5
[2] => 2
[3] => 5
[4] => 4
)

想要获得

RowIdPaidusedUnique为1且TypeOfBookkeepingRecord不为4,然后将TypeOfBookkeepingRecord更改为5

RowIdPaidusedUnique为2且TypeOfBookkeepingRecord不为4,然后将TypeOfBookkeepingRecord更改为5

但结果得到了

 RowIdPaidusedUnique | TypeOfBookkeepingRecord 
 ---------------------------------------------
     1               |     5
     2               |     1
     3               |     

AND TypeOfBookkeepingRecord <> ?

似乎有些不对劲

我是否需要更改为

WHEN ? AND TypeOfBookkeepingRecord <> ? THEN ?

1 个答案:

答案 0 :(得分:2)

您希望使用CASE语句执行此操作,并将条件TypeOfBookkeepingRecord is not 4放入WHERE

在此处查看演示小提琴http://sqlfiddle.com/#!2/9c831/1

UPDATE table1
SET TypeOfBookkeepingRecord = 
(CASE WHEN RowIdPaidusedUnique = 1 then 5 
 WHEN  RowIdPaidusedUnique = 2 then 1 END)
WHERE TypeOfBookkeepingRecord != 4