前の日 / 次の日 / 最新 / 2013-10

XINUJP - ChangeWebLog / 2013-10-17

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

2024 : 01 02 03 04 05 06 07 08 09 10 11 12
2023 : 01 02 03 04 05 06 07 08 09 10 11 12
2022 : 01 02 03 04 05 06 07 08 09 10 11 12
2021 : 01 02 03 04 05 06 07 08 09 10 11 12
2020 : 01 02 03 04 05 06 07 08 09 10 11 12
2019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12

2013-10-17 Thu

mysql CASE の ELSE は必須!! [mysql]

mysql SQL で、CASE を使った UPDATE を実行。

UPDATE table1
SET
  ccc =
  CASE
    WHEN aaa = '111'
      THEN '888'
    WHEN aaa = '222'
      THEN '999'
  END
;


と、ccc = 888/999 は、思った通りに設定されたが、それ以外のレコードの ccc には null が設定されてしまった!!

http://dev.mysql.com/doc/refman/5.1/ja/control-flow-functions.html によると

一致する結果値がない場合は、ELSE のあとの結果が戻され、ELSE パートがない場合は、NULL が戻されます。

だそうな...

なので、ELSE を追加した次が正しい記述。

UPDATE table1
SET
  ccc =
  CASE
    WHEN aaa = '111'
      THEN '888'
    WHEN aaa = '222'
      THEN '999'
    ELSE ccc
  END
;


ELSE は必須ですね。

最終更新時間: 2025-01-14 10:03