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

すべての列を「ジミー」で更新します。それは、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

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

または、すべてnullがある場合:

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 に答える