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]