• 締切済み

UPDATEの書き方

MDBよりMySQLへの移行で最近SQL文を始めたばかりです。 1テーブルで、あるキー毎に最小値を求め更新するSQL文をお教え下さい。 テーブル名「input」 キー「TEL_NO」単位に「IN_SQNO」の最小値を求め更新。 (テーブル:input) ┌────┬───-─┬───┐ │TEL_NO │IN_SQNO │ PAGE │ ├────┼───-─┤───┤ │0001  │   1 │   │ │0001  │   2 │   │ │0001  │   3 │   │ │0002  │   4 │   │ │0002  │   5 │   │ │0003  │   6 │   │ │0005  │   8 │   │ │0005  │   9 │   │ └────┴───-─┴───┘ (更新結果) ┌────┬───-─┬───┐ │TEL_NO │IN_SQNO │ PAGE │ ├────┼───-─┤───┤ │0001  │   1 │  1 │ │0001  │   2 │  1 │ │0001  │   3 │  1 │ │0002  │   4 │  4 │ │0002  │   5 │  4 │ │0003  │   6 │  4 │ │0005  │   8 │  8 │ │0005  │   9 │  8 │ └────┴───-─┴───┘ (自分で考えてSQL) UPDATE [input_tel] SET [input_tel].[PAGE] = (SELECT MIN([aa].[IN_SQNO]) FROM [input_tel] AS [aa] WHERE [input_tel].[TEL_NO] = [aa].[TEL_NO] GROUP BY [aa].[TEL_NO]);

みんなの回答

回答No.1

MySQLの質問をする場合は、バージョンを書きましょう。 最新は5.1だと思いますが、サブクエリの実装が4.1と比較的最近だったりします。 >UPDATE [input_tel] > SET [input_tel].[PAGE] = ACCESSやSQL Serverでは、表名や列名を[]や"で囲むことで、予約語と同じキーワードを使用できると承知していますが、MySQLでは「`」(バックォートを使います。 また、一つの表に対して、検索した結果で更新する操作は、最新バージョンでも実装されていないようです。 (1)作業用の表の定義&データ格納 create table temp_input as select * from `input`; (2)更新 update `input` as i set `page`=(select min(in_sqno) from temp_input as t where i.tel_no=t.tel_no); (3)後始末 drop temporary table temp_input;

kojikojiM
質問者

お礼

ご回答ありがとう御座います。 >MySQLの質問をする場合は、バージョンを書きましょう。 すみません。 勉強になりました。 バージョン:5.0です。 >ACCESSやSQL Serverでは、表名や列名を[]や"で囲むことで、予約語と同じキーワードを使用できると承知していますが、MySQLでは「`」(バックォートを使います。 そうなんですね。 最近MySQLを勉強始めたばかりで、AccessからODBC経由の リンクでは問題なかったのですが、 これから 直接MySQLへの更新等を行おうと勉強中ですので 非常にたすかりました。 お教え頂いた方法で、早速テストしてみます。

関連するQ&A