2012-10-03 56 views
0

我想要做这个查询哪些更新只有第一列是空的。以下是目前的查询:Mysql CASE和更新

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并更新等等...我是对这是什么原因造成的?如果是的话我怎么能解决这个问题?如果不是,我应该如何重写这个?

+0

究竟是你想做些什么? – Tom

+1

*它用'Jimmy'更新所有列。* umm当我在[SQLFiddle](http://sqlfiddle.com/#!2/5c24b/1)上尝试时,它不适合我。也许你应该创建一个你自己的SQL小提琴去演示它 –

+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 
+0

*慢拍*我的上帝,这样一个显而易见的问题,我看着。非常感谢你!这里是你的upvote和复选标记:) –

+1

没问题。最好的解决方案通常是最简单的解决方案。 :) – Tom

0

我想知道如果空值可能会导致您的问题。您可以使用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 
+0

我也想到了,但我改变了我的数据库结构不使用null。这里是我的数据库的副本http://sqlfiddle.com/#!2/a71c7/1/0 –

+0

尝试交换两组,我认为第二组受到第一组的影响。 –

+0

你说得对。 – Tom