- ベストアンサー
SQLのコマンドでif構文
PHPMyAdminのSQLのコマンドで、 もしdata001がNullだったら、data001に"1"というデータをいれる。 もしdata001がNullじゃないかつdata002がNullだったら、data002に"1"というデータをいれる。 このようなSQLのコマンドはどうやって打つのでしょうか。 回答よろしくおねがいします!
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>1を入れる部分で文章みたいなのを入れてみたのですが、できませんでした。 >1の部分は数字じゃなきゃできないでしょうか? はて?以下試してみてください //元データ create table tbl (id int ,data001 varchar(10) null ,data002 varchar(10) null); insert into tbl values(1,'aaa','bbb'),(2,null,'ccc'),(3,'ddd',null),(4,null,null),(5,'',''); //更新 update tbl set data002=if(data001 is not null and data002 is null,'hoge',data002),data001=coalesce(data001,'fuga') where data001 is null or data002 is null; ちなみにnullと''は別なのは理解いただいていますよね?
その他の回答 (2)
- yambejp
- ベストアンサー率51% (3827/7415)
create table tbl (id int ,data001 int null ,data002 int null); insert into tbl values(1,10,10),(2,null,10),(3,10,null),(4,null,null); だとして、id=1は無視、id=2はdata001を1に、id=3はdata002を1に id=4はdata001を1、data002をnullのまま とすると update tbl set data002=if(data001 is not null and data002 is null,1,data002),data001=coalesce(data001,1) where data001 is null or data002 is null; みたいな感じ まぁ厳密にはwhere句はいらない気がしますが・・・ ただしこれを update tbl set data001=coalesce(data001,1),data002=if(data001 is not null and data002 is null,1,data002) where data001 is null or data002 is null; でやってしまうと、data001がnullでも先に1がセットされてしまうので、 つねにdata002は1になってしまうのでNG
お礼
回答ありがとうございました!
補足
1を入れる部分で文章みたいなのを入れてみたのですが、できませんでした。 1の部分は数字じゃなきゃできないでしょうか? テーブルのデータはint から varcharに変えてみました。
- bin-chan
- ベストアンサー率33% (1403/4213)
> もしdata001がNullだったら、data001に"1"というデータをいれる。 ifnullを使う Select ifnull( data001, ”1” ) as data001; 後半は自信無い。 > もしdata001がNullじゃないかつdata002がNullだったら、data002に"1"というデータをいれ る。 data001がNullならどうするの? Select ( CASE WHEN (isnull( data001 ) = false and isnull( data002 ) = true) THEN ”1” ELSE data002 END ) as data002; かな?
お礼
回答ありがとうございます! 見た感じこっちの方が難しそうで、まだ挑戦してないのですが、また今後時間があったらこっちの方法も試してみたいと思います! ありがとうとうございました!
お礼
できました!!! ありがとうございます!!