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

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]