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

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

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

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

Q&A

解決済

1回答

1081閲覧

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

aizawal-hiroki

総合スコア56

MySQL

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

0グッド

1クリップ

投稿2018/04/27 02:06

前提・実現したいこと

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/04/27 02:09

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

2018/04/27 02:19

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

2018/04/27 02:27

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

回答1

0

ベストアンサー

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

SQL

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

投稿2018/04/27 02:09

sazi

総合スコア25138

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2018/04/27 02:39

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

2018/04/27 02:54

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

退会済みユーザー

2018/04/27 03:24

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

2018/04/27 03: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 03:34

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

退会済みユーザー

2018/04/27 03:37

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

2018/04/27 03:45

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

2018/04/27 03:51

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

退会済みユーザー

2018/04/27 03:52

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

2018/04/27 03:53

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

2018/04/27 03:55

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

2018/04/27 03:55

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

2018/04/27 03:59

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

2018/04/27 04:00

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

退会済みユーザー

2018/04/27 04:00

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

退会済みユーザー

2018/04/27 04:02

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

2018/04/27 04:02

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

退会済みユーザー

2018/04/27 04:06

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

2018/04/27 04:08

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

2018/04/27 04:10

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

退会済みユーザー

2018/04/27 04:15

>単純にboolean型で考えた時、trueかfalseを決めきれない時にはNull以外の選択肢はありません。 そこにboolean型を使うという発想は、普通は無いのだぞな、もし。 その時点でそれはboolean型のカラムではないのだぞな、もし。
sazi

2018/04/27 04:27 編集

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

退会済みユーザー

2018/04/27 04:26

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

退会済みユーザー

2018/04/27 04:29

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

2018/04/27 04:30

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

退会済みユーザー

2018/04/27 04:33

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

2018/04/27 04:33

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問