mysql:13578
From: "kataoka michio" <"kataoka michio" <kataoka@xxxxxxxxxx>>
Date: Tue, 5 Dec 2006 22:24:37 +0900
Subject: [mysql 13578] Re: 複数テーブルのUPDATEがうまくいかない
こんにちは。返信ありがとうございます。 『get_data.idが'002'のレコード』『get_data.idが'003'のレコード』 が無視されているのは特に不思議ではない、ということですね。 クエリの書き方が悪い、という結論で了解しました。 SQLエンジンによって動作が異なるのは分かりますが、 INNER JOINでここまで結果が違ってしまうとは思っていませんでした。。。 何か納得いかないですが、良い勉強になりました。 > どっちが正しいかはさておき、、sum関数などを使ってもっとわかりやすいSQLに > した方がよいと思います。 こちらは精進したいと思います。 ----- kataoka michio <kataoka@xxxxxxxxxx> ----- Original Message ----- > こんにちは。 > 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]