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