Mysql CASE和UPDATE

时间:2012-10-03 22:04:08

标签: mysql

我正在尝试执行此查询,该查询仅更新第一列为空的列。到目前为止,这是一个查询:

UPDATE `names` SET 
`name_1` = CASE WHEN `name_1` = '' then 'Jimmy' else `name_1` end,
`name_2` = CASE WHEN `name_1` != '' and `name_2` = '' then 'Jimmy' else `name_2` end

它使用'Jimmy'更新所有列。我认为这是因为SET将更新它然后继续下一个SET并将更新那个......我是否正确的原因是什么?如果是这样我怎么能解决这个问题?如果不是,我该如何重写呢?

2 个答案:

答案 0 :(得分:1)

我认为如果您交换订单,它将正常工作。

试试这个:

UPDATE `names` SET 
`name_2` = CASE WHEN `name_1` != '' and `name_2` = '' then 'Jimmy' else `name_2` end,
`name_1` = CASE WHEN `name_1` = '' then 'Jimmy' else `name_1` end

答案 1 :(得分:0)

我想知道null值是否可能导致您出现问题。您可以使用IFNULL函数将它们转换为空字符串(如果您有空字符串和NULL)。试试这个:

UPDATE `names` SET 
    `name_1` = CASE WHEN IFNULL(`name_1`, '') = '' then 'Jimmy' else `name_1` end,
    `name_2` = CASE WHEN IFNULL(`name_1`, '') != '' and IFNULL(`name_2`, '') = '' then 'Jimmy' else `name_2` end

或者如果你有所有空值:

UPDATE `names` SET 
    `name_1` = CASE WHEN `name_1` IS NULL then 'Jimmy' else `name_1` end,
    `name_2` = CASE WHEN `name_1` IS NOT NULL and `name_2` IS NULL then 'Jimmy' else `name_2` end