• 締切済み

Sumで該当データがない場合

空が返ってきます。 空の場合、0になるようにするにはどうしたら良いでしょうか? UPDATE `table` SET paidy = (select sum(totaly) from `SUBTABLE`) サブテーブルのデータを元にデータを更新するのに利用しています。 ご存知の方何か良い解決方法を教えて下さい。

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

>この方法も思いついて、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になる

taaaaaaa
質問者

お礼

フィールドをnot nullにすると、実行の際にエラーが出てしまいます。 SQL文を付け足してnullの場合、0を代入するようにしました。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

UPDATE文のWHERE句がありませんのでpaidyが全て更新されてしまいますがよろしいのですか? この場合、`table`テーブルのpaidyの属性を int not null default 0 などにしておけばoaidyにnullを書きこまれれば0として処理されます

taaaaaaa
質問者

お礼

この方法も思いついて、DBの設定を変えて試したのですがダメでした。 Where句は実際はありますが、質問では省略しました。

回答No.1

UPDATE `table` SET paidy = (select ifnull(sum(totaly), 0) from `SUBTABLE`) とかでいいんじゃないでしょうか。

taaaaaaa
質問者

お礼

ヒントありがとうございます。 試してみたのですが、やはり空欄になってしましました。

関連するQ&A