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

mysql:6133

From: "梅村繁実" <"梅村繁実" <umemura@xxxxxxxxxx>>
Date: Thu, 12 Sep 2002 09:47:56 +0900
Subject: [mysql 06133] Re: 他テーブルのデータでアップデート

山下さん、遠藤さん、菅原さん、川合さん、とみたさん

はじめまして、梅村です、皆さんご教授有難う御座います。


>> 山下さんは書きました
> 以下のようなSQL文を発行するのが「筋」らしいです。
> =====================================================
> update codemaster set EDP_Code=temp.EDP
>                            where ID=(select ID from temp);
> =====================================================
> # 上の式があってるかどうかは保証の限りではありません(汗)。

↑検証したところやはりエラーが帰ってきました
You have an error in your SQL syntax near 'select ID from temp)' at line 2

> しかし、「村上、立岡著 MySQL活用ガイド 株式会社秀和システム」の
> 7ページにMySQLの現行バージョンには「副問い合わせ」が存在しない
> という記述がありました。
> したがって、現状ではアプリケーション側で反復処理(loop)などで
> 対応するしかないと思われます。

なるほど、tempテーブルのIDとEDPを先に抽出してスクリプト内の配列に格納してか
ら
loop内で配列回数文updateするという事ですね。
やってみます。
-------------------------------------------------------

>>菅原さんは書きました
>  副問い合わせの一種に違いないと思いますが、こういうケースはデータベース
> によってSQLの書き方が違うようです。
>  MS SQLServerでは
>     UPDATE codemaster SET EDP_Code = temp.EDP
>     FROM temp WHERE codemaster.ID = temp.ID
> のようになるらしいです。
>  副問い合わせなら
>     UPDATE codemaster SET EDP_Code = (
>         SELECT temp.EDP FROM temp, codemaster
>         WHERE temp.ID = codemaster.ID)
> になるような気がしますが、UPDATE文にWHERE句を書かなくても良いのか気にな
> るとこです。

此方も試してみましたがやはり次のように構文エラーと帰ってきました
You have an error in your SQL syntax near 'SELECT temp.EDP FROM temp,
codemaster WHERE temp.ID = codemaster.ID)' at line 1

>  まあ、MySQLはまだ副問い合わせが使えないですし(4.1で実装予定らしい)、
> ドキュメントの「近い将来に完了せねばならないもの」の中に
>
>     UPDATE items,month SET items.price=month.price
>     WHERE items.id=month.id;
>
> ってのがありますんで、それまで待たなくてはいけないです(これは4.1よりさ
> らに後みたいですね……)。

なるほど、、私の使ってるバージョンでは未対応なのか。
-------------------------------------------------------------------
>> 川合 孝典 さんは書きました
> ただテーブルを作るといっても一時テーブル(TEMPORARY TABLE)であれば、
> コネクション単位に作成されますし、コネクションが切れると自動的に削除され
> ますから、通常にテーブルを作ることを考えるよりは、安心して使える思います。

そうなんですか、Replaceコマンドは勉強してませんでしたので、どんどんテーブル
が
作成されて、手動で削除しないといけないと思ってました^^;

> CREATE TEMPORARY TABLE tmp_code
>   SELECT temp.ID, temp.EDP, MST.sonota
>  FROM temp INNER JOIN codemaster MST ON temp.ID=MST.ID;
>
> REPLACE codemaster(ID, EDP_code, sonota)
>   SELECT * FROM tmp_code;
>
> mysql> SELECT * FROM codemaster;
> +----+----------+----------+
> | ID | sonota   | EDP_Code |
> +----+----------+----------+
> |  1 | SONOTA:1 | MSTER:1  |
> |  2 | SONOTA:2 | TMP:2    |
> |  3 | SONOTA:3 | MSTER:3  |
> +----+----------+----------+

此方も、後で挑戦してみたいと思います、同じ結果を得られるのであれば、処理速度
の速いほうを
選んで、実装しようと思います。
---------------------------------------------------------------------
> とみたです。
> ところがどっこい、4.0.2 で使えるようになってるみたいです。
>
> Changes in release 4.0.2
> ------------------------
> 〜中略〜
>    * First pre-version of multi-table `UPDATE' statement.

そうなんですか、そしたら早々にリリースされてるMySQL 4.0 -- beta release をダ
ウンロードして
見ます。確か4.0.3でしたよねbeta release
副問い合わせが出来るか試してみます。


最後に、こんな返信の仕方で大丈夫ですか?それぞれの方のメールに返信したほうが
良かったのでしょうか?
本題とは違いますが、MLの使い方の(マナー的なもの)がおかしかったらご指摘くだ
さい。
皆さん、有難うございました。


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

      6113 2002-09-11 12:52 ["梅村繁実" <umemura@] 他テーブルのデータでアップデート        
      6124 2002-09-11 16:22 ┣["Takashi Yamashita" ]                                       
      6126 2002-09-11 17:05 ┃┣[SUGAWARA Hajime <sug]                                     
      6132 2002-09-11 23:44 ┃┃┗[とみたまさひろ <tomm]                                   
      6140 2002-09-13 22:11 ┃┃ ┗["umemura" <shigemi.u]                                 
      6141 2002-09-14 00:54 ┃┃  ┗[ふぁんく <freeml@xxx] 格納データ型について          
      6142 2002-09-14 01:45 ┃┃   ┣[<miffyz@xxxxxxxxxx> ]                             
      6147 2002-09-14 21:37 ┃┃   ┃┗[<freeml@xxxxxxxxxx> ]                           
      6144 2002-09-14 19:26 ┃┃   ┗[とみたまさひろ <tomm]                             
->    6133 2002-09-12 09:47 ┃┗["梅村繁実" <umemura@]                                     
      6134 2002-09-12 10:14 ┃ ┗["Takashi Yamashita" ]                                   
      6125 2002-09-11 17:03 ┣[遠藤 俊裕 <endo_t@xx]                                       
      6127 2002-09-11 17:11 ┃┗[遠藤 俊裕 <endo_t@xx]                                     
      6130 2002-09-11 18:02 ┗["KAWAI,Takanori" <GC]