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

mysql:7952

From: 田中 健司 <田中 健司 <tanaken@xxxxxxxxxx>>
Date: Thu, 26 Jun 2003 13:43:20 +0900
Subject: [mysql 07952] Re: 複数テーブルの値で update


On Thu, 26 Jun 2003 12:49:37 +0900
miplin@xxxxxxxxxx wrote:

はじめまして 田中と申します。
2003/05 からMySQLを使いはじめました。
よろしくお願いします。

> >SQL文を見ても何をしたいのか良くわからなかったのですが (^^;
> >t1 の a と b を足して、同じ id の t2 レコードの c を更新する
> >ということでしょうか。
> その通りです。
> 
> OSはWindows2000
> MySQLは mysql-3.23.28-gammaを使っています。
> 
> >MySQL 4.0.x でよければ、
> >
> >   update t1,t2 set t2.c=t1.a+t1.b where t1.id=t2.id;
> >
> >で、できると思います。
> mysql-3.23.28-gammaですとエラーになってしまい、うまくいきませんでした。
>
> よろしければmysql-3.23.28-gammaでのSQLを教えてください、お願いします。
「MySQL徹底活用-翔泳社」 を参考にさせていただきます。
mysql-3.23.28-gammaで使えるかどうかはわかりませんが
update 文を複数テーブルに対して行えないMySQLでの解決方が載っています。

1.t2と同じ構成のtemporary table (tmp_t2)を作成
2.tmp_t2 に t1.ID=t2.ID を満たすレコードを t2.id, t1.a+t1.b で挿入
3.replace を用い tmp_t2 のレコードを t2 に上書き
4.tmp_t2を削除

といった手順でできますでしょうか?
temporay table を作成/破棄する事から
DBに対し create drop 権限
repleace を使う事から
t2テーブルに対しupdate 権限の他に delete, insert 
が必要なのかもしれません。
(権限の話は予想なので
まとめて調査/報告をしていただけると非常に助かります)

文章ではうまく表現できなかった 2. を具体的に書くと
insert into
  tmp_t2
select
  t2.ID, t1.a+t2.b
from
  t1, t2
where
  t1.ID=t2.ID
(どなたか上記のSQL文を日本語で表現してください)

できるかどうかの検証などは行っていませんが
解決のきっかけになれば幸いかと思います。

-- 
田中 健司 <tanaken@xxxxxxxxxx>


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

      7946 2003-06-26 11:46 [<miplin@xxxxxxxxxx> ]                                         
      7948 2003-06-26 12:14 ┗[とみたまさひろ <tomm] 複数テーブルの値で update             
      7951 2003-06-26 12:49  ┗[<miplin@xxxxxxxxxx> ]                                     
->    7952 2003-06-26 13:43   ┗[田中 健司 <tanaken@x]                                   
      7956 2003-06-26 16:12    ┗[<miplin@xxxxxxxxxx> ]