• ベストアンサー
  • 困ってます

update文の一括発行

  • 質問No.7079569
  • 閲覧数1199
  • ありがとう数0
  • 回答数3

お礼率 56% (42/75)

お世話になります。

parent_idという親テーブルのIDを格納するフィールドと
idという自分のIDを格納するフィールドと
データを格納するdataというフィールドがあるtbl01というテーブルがある場合に

update tbl01
set data = 'xxx'
where parent_id = 1
and id = 1

update tbl01
set data = 'yyy'
where parent_id = 1
and id = 2

update tbl01
set data = 'xyz'
where parent_id = 1
and id = 3

※dataに格納するデータは親テーブルとは関係ない独立したデータです。

という感じにparent_id = 1が格納されているレコードにデータを次々と更新していきたいのですが
1回のupdate文でまとめて発行するやり方はあるのでしょうか。
1回1回発行するのは時間がかかるためできれば1回でまとめて発行したいのです。

update tbl01
set data in ('xxx', 'yyy', 'xyz')
where parent_id = 1
and id in(1, 2, 3)

イメージとしてはこんな感じです。
よろしくお願いいたします。

質問者が選んだベストアンサー

  • 回答No.1
  • ベストアンサー

ベストアンサー率 60% (431/717)

> update tbl01
> set data in ('xxx', 'yyy', 'xyz')
> where parent_id = 1
> and id in(1, 2, 3)

これは無理ですね。そもそもidの(1,2,3)と('xxx', 'yyy', 'xyz')のヒモ付がなされていません。

create temporary table tmp01
(
id int,
parent_id int,
data varchar(10)
);
で一時テーブルを作り、
insert into tmp01 values ( 1,1,'xxx'),(1,2,'yyy'),(1,3,'zzz');
update tbl01 join tmp01 on tbl01.id=tmp01.id
and tbl01.parent_id=tmp01.parent_id
set tbl01.data=tmp01.data;
ではダメですか?

その他の回答 (全2件)

  • 回答No.3

ベストアンサー率 75% (263/350)

CASE 使えば?

update tbl01 set data =
(case id when 1 then 'xxx'
      when 2 then 'yyy'
      when 3 then 'zzz'
else data end)
where id in (1, 2, 3)
and parent_id = 1

http://dev.mysql.com/doc/refman/5.1/ja/case-statement.html
  • 回答No.2

ベストアンサー率 51% (3827/7415)

データが3つくらいじゃ効果は薄いですが、一度テンポラリにデータを
格納してからupdateすればすっきりします

create temporary table tmp(id int,data varchar(30));
insert into tmp values(1,'xxx'),(2,'yyy'),(3,'zzz');
update tbl01
inner join tmp using(id)
set tbl01.data=tmp.data
where parent_id = 1;
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ