重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

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

A 回答 (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;
    • good
    • 0
この回答へのお礼

ご回答ありがとう御座います。
>MySQLの質問をする場合は、バージョンを書きましょう。
すみません。
勉強になりました。 バージョン:5.0です。

>ACCESSやSQL Serverでは、表名や列名を[]や"で囲むことで、予約語と同じキーワードを使用できると承知していますが、MySQLでは「`」(バックォートを使います。
そうなんですね。
最近MySQLを勉強始めたばかりで、AccessからODBC経由の
リンクでは問題なかったのですが、
これから 直接MySQLへの更新等を行おうと勉強中ですので
非常にたすかりました。

お教え頂いた方法で、早速テストしてみます。

お礼日時:2007/08/09 18:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す