mysql:13577
From: YuGo <YuGo <yu.gotou@xxxxxxxxxx>>
Date: Tue, 05 Dec 2006 17:29:30 +0900
Subject: [mysql 13577] Re: 複数テーブルのUPDATEがうまくいかない
こんにちは。 get_data.idが'001'のレコードのget_dataは1、user_idは86でuser_data.idが86 のpointは0だから >user_data.point + get_data.get_point は1+0=1でいいんじゃないですか。 どっちが正しいかはさておき、、sum関数などを使ってもっとわかりやすいSQLに した方がよいと思います。 YuGo > こんにちは、片岡と申します。 > > 複数テーブルを使ったUPDATEクエリに関して質問させて下さい。 > > > 下記「クエリ1」では全部で3レコードが結果として返ってきます。 > ところが「クエリ2」では1レコードしか更新されません。 > > 直感的には3レコード分更新されて、 > user_data.id=86の行の`point`は 7になりそうな気がするのですが、 > 実際にはuser_data.id=86の行の`point`は 1になります。 > このようなものなのでしょうか? > > MS-Access2000で同じクエリを走らせると、こちらは > user_data.id=86の行の`point`は 7になります。 > 他のデータベースは環境が無いので試せていませんが、 > 「クエリ2」のような書き方がおかしいのでしょうか。 > > > > ■クエリ1 > SELECT * > FROM > get_data > INNER JOIN user_data ON get_data.user_id = user_data.id > WHERE > (get_data.id IN ('001','002','003','004')); > > ■クエリ2 > UPDATE get_data > INNER JOIN user_data ON get_data.user_id = user_data.id > SET > user_data.point = user_data.point + get_data.get_point > WHERE > (get_data.id IN ('001','002','003','004')); > > > ■テーブル > CREATE TABLE `user_data` ( > `id` int(11) NOT NULL auto_increment, > `point` int(11) NOT NULL default '0', > PRIMARY KEY (`id`) > ) TYPE=InnoDB ; > INSERT INTO user_data VALUES > (86, 0), (87, 0), (89, 0); > > CREATE TABLE `get_data` ( > `id` varchar(32) NOT NULL default '', > `get_point` int(11) NOT NULL default '0', > `user_id` int(11) NOT NULL default '0', > PRIMARY KEY (`id`) > ) TYPE=InnoDB ; > INSERT INTO get_data VALUES > ('001', 1, 86), ('002', 2, 86), ('003', 4, 86), > ('004', 8, 0), ('005', 16, 0), ('006', 32, 0); > > ■MySQLバージョン > 5.0.22(Linux版)、4.0.26(Windows版) > > > > ----- > kataoka michio <kataoka@xxxxxxxxxx> > > > >
13575 2006-12-05 12:28 [IKEBE Tomohiro <ikeb] セミナー開催のお知らせ 13576 2006-12-05 15:33 ┗["kataoka michio" <ka] 複数テーブルのUPDATEがうまくいかない -> 13577 2006-12-05 17:29 ┗[YuGo <yu.gotou@xxxxx] 13578 2006-12-05 22:24 ┗["kataoka michio" <ka]