やりたいこと
実施前の状態
テーブル名:city
field1 | field2 | field3 | field4 |
---|---|---|---|
北海道 | 札幌市中央区 | NULL | |
北海道 | 札幌市中央区 | 旭ヶ丘 | |
北海道 | 札幌市中央区 | 大通東 | |
北海道 | 札幌市中央区 | 大通西 | |
北海道 | 札幌市中央区 | 北一条東 | |
北海道 | 札幌市中央区 | 北一条西 |
やりたいこと
field1~3の文字列を連結してfield4に入れる
完成予想
field1 | field2 | field3 | field4 |
---|---|---|---|
北海道 | 札幌市中央区 | NULL | 北海道札幌市中央区 |
北海道 | 札幌市中央区 | 旭ヶ丘 | 北海道札幌市中央区旭ヶ丘 |
北海道 | 札幌市中央区 | 大通東 | 北海道札幌市中央区大通東 |
北海道 | 札幌市中央区 | 大通西 | 北海道札幌市中央区大通西 |
北海道 | 札幌市中央区 | 北一条東 | 北海道札幌市中央区北一条東 |
北海道 | 札幌市中央区 | 北一条西 | 北海道札幌市中央区北一条西 |
とりあえず連結文字を取得する方法
SQLite3では||
を入れることで連結可能
"abc"||"123"
=> abc123
今回はfield1~3を連結したいので
SELECT field1||field2||field3 FROM city;
連結文字を使ってUPDATE
通常のUPDATE基本文
UPDATE テーブル名 SET カラム = 値 WHERE 条件;
今までの流れから
UPDATE city SET field4 = (SELECT field1||field2||field3 FROM city);
(※全レコードで実施するので条件は付けなかった)
と考えてやってみたが失敗
何度かやってみてとりあえず成功した文はこっち
UPDATE city SET field4 = (SELECT field1||field2||field3)
カラムにNULLがあるときの対処
SQLiteでは値がNULLのときに別の値に置き換えてくれるifnull
がある
SELECT ifnull(カラム1, 置き換え後の値)
今回の場合
UPDATE city SET field4 = (SELECT ifnull(field1,"")||ifnull(field2,"")||ifnull(field3,""))
これでやりたかったことは成功
思ったこと
- こんなことする人がいるのかな
- 調べても出てこなかったからいないのでは
- 適当に書いてるので他にあれば教えてください
- 説明が雑すぎて信用できないかも