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> ]