0

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

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 并会更新它等等......我对导致这种情况的原因是正确的吗?如果是这样,我该如何解决?如果不是我应该如何重写这个?

4

2 回答 2

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
于 2012-10-03T22:30:59.447 回答
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
于 2012-10-03T22:20:47.370 回答