mysql:13576
From: "kataoka michio" <"kataoka michio" <kataoka@xxxxxxxxxx>>
Date: Tue, 5 Dec 2006 15:33:54 +0900
Subject: [mysql 13576] 複数テーブルのUPDATEがうまくいかない
こんにちは、片岡と申します。 複数テーブルを使った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]