- 締切済み
Sumで該当データがない場合
空が返ってきます。 空の場合、0になるようにするにはどうしたら良いでしょうか? UPDATE `table` SET paidy = (select sum(totaly) from `SUBTABLE`) サブテーブルのデータを元にデータを更新するのに利用しています。 ご存知の方何か良い解決方法を教えて下さい。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- yambejp
- ベストアンサー率51% (3827/7415)
>この方法も思いついて、DBの設定を変えて試したのですがダメでした。 たぶんやり方が間違えているので、以下参考に create table main (id int not null primary key,paidy int not null default 0); insert into main values(1,1),(2,1),(3,1); create table sub (id int not null primary key,totaly int,main_id int); insert into sub values(1,10,1),(2,20,1),(3,50,3); ※比較のため仮にmainテーブルのpaidyの値を1にしておく update main SET paidy = (select sum(totaly) from sub where main_id=1) where id=1; とすると、mainのid=1のpaidyは30になる update main SET paidy = (select sum(totaly) from sub where main_id=2) where id=2; すると、sum(totaly)はnullだが、paidyは0になる
- yambejp
- ベストアンサー率51% (3827/7415)
UPDATE文のWHERE句がありませんのでpaidyが全て更新されてしまいますがよろしいのですか? この場合、`table`テーブルのpaidyの属性を int not null default 0 などにしておけばoaidyにnullを書きこまれれば0として処理されます
お礼
この方法も思いついて、DBの設定を変えて試したのですがダメでした。 Where句は実際はありますが、質問では省略しました。
- めとろいと(@naktak)
- ベストアンサー率36% (785/2139)
UPDATE `table` SET paidy = (select ifnull(sum(totaly), 0) from `SUBTABLE`) とかでいいんじゃないでしょうか。
お礼
ヒントありがとうございます。 試してみたのですが、やはり空欄になってしましました。
お礼
フィールドをnot nullにすると、実行の際にエラーが出てしまいます。 SQL文を付け足してnullの場合、0を代入するようにしました。