[前][次][番号順一覧][スレッド一覧]

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]