質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.32%

  • MySQL

    6196questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

sql カラムの0を一括でNULLにしたい

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 347

aizawal-hiroki

score 39

 前提・実現したいこと

+---------+
| test      |
+---------+
| 0          |
| 0          |
| 0          |
| 0          |
| 0          |
| 0          |
| 0          |
| 0          |
| 0          |
| 0          |
| 0          |
| 0          |
| 0          |
| 1234567|
| 0          |
| 0          |
+---------+
このようなデータがあったとして0だけをNULLに一括で変更するのはどうやればよろしいでしょうか
mysqlのバージョンは5.0.95です 

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • mts10806

    2018/04/27 11:09

    テーブルの定義を提示してください。また、調べてみたこと、やってみたことを具体的に追記してください。また参考先サイトがあればURLも質問に追記してください。既に見た先が回答についてしまうと無駄なやり取りが発生しますし、もしかしたら参考記事の理解が間違っているために解決に至れていないのかもしれません。https://teratail.com/help/question-tips#questionTips1-2 要はこの内容だけだと「丸投げ」です。

    キャンセル

  • sazi

    2018/04/27 11:19

    > mts10806さん こちらに気付いてなくて、啓蒙に水を差す形になってすみません。

    キャンセル

  • mts10806

    2018/04/27 11:27

    あ、いえ。確かに回答するのは簡単な内容ですが、質問者さんの今後のこと考えたら「これくらいは調べた方が早いんじゃないかな」と思った次第です。

    キャンセル

回答 1

checkベストアンサー

+1

単純に条件を指定してupdateするだけです。

update テーブル set test=Null where test=0

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/27 11:39

    ちなみに、DB業界ではNULLは死ぬほど嫌われていますので、
    明確な理由があってNULLをつかっているのでなければ
    NULLを許さないようにした方がよいですね

    キャンセル

  • 2018/04/27 11:54

    DBというより、DBにアクセスしてヌルポが発生する側ですよね。
    個人的には意味もなく0や空白を初期値設定しているのを見るとイラッときます。

    キャンセル

  • 2018/04/27 12:24

    そういう問題じゃないぞなもし。

    キャンセル

  • 2018/04/27 12:25

    例は悪いですがたとえば
    create table tbl1 (id int unique,val int null);
    insert into tbl1 values(1,100),(2,101),(3,null),(4,null),(5,null);
    create table tbl2 (id int unique,val int null);
    insert into tbl2 values(1,200),(2,null),(3,101),(4,null),(6,null);

    select * from tbl1 left join tbl2 using(id);

    としたとき、id=4のようにtbl2の値がnullなのかid=5のように
    tbl2に値がないのか、判断つきません
    nullは論理的に重要な役割をもつので値に使うのはトラブルの元です
    その他、nullの挙動についてはマニュアルにも補足されています

    https://dev.mysql.com/doc/refman/5.6/ja/problems-with-null.html

    きちんと理解して使えば絶対ダメなわけではないですが
    明確な理由がなけば使うメリットはほぼないですね

    キャンセル

  • 2018/04/27 12:34

    これは議論を呼びそうな。。
    datetime で元々nullが気持ち悪くて0とか1900年とか2037年とか使ってましたが、しっくり来なくて最終的にはnullに戻って来ました。その頃からnull好きでわざわざdefault(null) とか明示したりww

    キャンセル

  • 2018/04/27 12:37

    そのカラムでソートするとめんどくさいぞな、もし。

    キャンセル

  • 2018/04/27 12:45

    そのデータがあるか無いかはプライマリー項目とか結合項目で判断すれば済みます。
    無効な値を示すのに0や空白などを設定したりすると、coalesce()での判断効かなくなるし、is nullで判断できるところを文字列だと厳密な桁数で判断が必要だったり。
    CSVで利用する際なんかも余計なんですよね。

    キャンセル

  • 2018/04/27 12:51

    いくつか思いつくこと
    ・ユーザーがNULLを投入したいとき特別なUIを作らないといけない
    ・そもそもNULLが多発するなら正規化してNULL以外のデータだけ持てばいい
    ・文字列カラムのNULLはむしろそちらの方が気持ち悪い
    ・所定のデータ「以外」を抽出するときにヒットしない

    キャンセル

  • 2018/04/27 12:52

    普通は痛い目見て二度とNULLなんか使うかと心に決めるようになるものだぞな、もし。

    キャンセル

  • 2018/04/27 12:53

    外部結合して取得した際に片側に値が無ければNullが返却されるのだから、取得の際には、Null考慮はされるべきだと思っています。

    キャンセル

  • 2018/04/27 12:55

    普段luckerさんの意見と合うことはないのですが珍しく一致。
    痛い目見たり、無駄な処理をいれたりすることを恐れないなら
    使えばいいと思います。

    キャンセル

  • 2018/04/27 12:55

    >普通は痛い目見て二度とNULLなんか使うかと心に決める
    どちらかと言うとNotNull制約によって無理やり突っ込まれた初期値に苦労した方です。

    キャンセル

  • 2018/04/27 12:59

    データを扱うフロント側はNull考慮が必要になるので、手間なのは理解していますが、言語等によってどの程度の手間なのかは正直理解出来ていないのかもしれません。

    キャンセル

  • 2018/04/27 13:00

    Nullは3値としてどちらでもないものとして意味を持つので敢えて排除するものでは無いと考えています。

    キャンセル

  • 2018/04/27 13:00

    一時期私も大嫌いでした。しかしnull は“存在“します。null を不要としたdbを僕は知りません。使いこなせるかどうかだと考えるようになりました

    キャンセル

  • 2018/04/27 13:02

    仕事は修行と違うんだから無理して茨の道を踏み分ける必要はないと思うぞな、もし。

    キャンセル

  • 2018/04/27 13:02

    データアクセスするのにnullを置き換えるラッパーとかがあれば、丸く収まらないですかね。

    キャンセル

  • 2018/04/27 13:06

    IS NULL ASCでソートは解決するかと

    キャンセル

  • 2018/04/27 13:08

    単純にboolean型で考えた時、trueかfalseを決めきれない時にはNull以外の選択肢はありません。
    結局入力されなかったものとしてはNullを設定するのが順当だと考えているのです。

    キャンセル

  • 2018/04/27 13:10

    テーブル定義欲しいなあ…(追記依頼のコメントに戻る)

    キャンセル

  • 2018/04/27 13:15

    >単純にboolean型で考えた時、trueかfalseを決めきれない時にはNull以外の選択肢はありません。

    そこにboolean型を使うという発想は、普通は無いのだぞな、もし。
    その時点でそれはboolean型のカラムではないのだぞな、もし。

    キャンセル

  • 2018/04/27 13:25

    なお、booleanの、trueでもfalseでもない値についての対応はこのような状況のようだぞな、もし。
    http://gihyo.jp/dev/serial/01/sql_academy2/000801

    キャンセル

  • 2018/04/27 13:26 編集

    データの根本的な状態を表すのに分かりやすくboolean型を引き合いに出しただけで、設計とはまた別です。
    DBでは値を入れなければNULLですから、NotNull制約を付けて入力が無い場合の値をどうしようと考える方が手間だと感じます。

    キャンセル

  • 2018/04/27 13:26

    それってすべてにたいして0:未回答、1:有り、2:無し みたいなint型作るん?それこそ身勝手なプログラム

    キャンセル

  • 2018/04/27 13:29

    何をもって身勝手なのかよくわからないぞな、もし。後々問題がでてきそうなNULLを安易に使う方がよっぽど他のエンジニアに対して身勝手ぞな、もし。

    キャンセル

  • 2018/04/27 13:30

    「こうあるべき」議論を続けても終わらないと思うので、この辺りにしておいては?
    質問者さん的には既に解決している質問なので、あまり続ける意味はないと思います。(質問内容からもどんどん離れています)
    続けたければその手の質問を別途あげて、もっと広く意見を求めてはどうでしょうか。

    キャンセル

  • 2018/04/27 13:33

    仲裁ありがとうございます。不毛でした。

    キャンセル

  • 2018/04/27 13:33

    >質問内容からもどんどん離れています
    ですね。
    単に埋もれてしまうだけですし。

    キャンセル

同じタグがついた質問を見る

  • MySQL

    6196questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。