dポイントプレゼントキャンペーン実施中!

TABLE-A が

NO str1 str2
001 aaa AAA
002 bbb BBB ←削除
003 ccc CCC

のときに、NO=002を削除後、連番をふり直すために
UPDATE TABLE-A SET NO = NO - 1 WHERE NO > 2;
というようにしましたが、案の定、003が2となってしまいました。
これを、002とする方法はありますでしょうか。

よろしくお願い致します。

A 回答 (4件)

update 文にするとこんな感じになるとは思いますが。



update TABLE-A
set NO = LPAD(NO-1 , 3 , '0')
where NO > 2

参考URL:http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd …
    • good
    • 0
この回答へのお礼

ありがとうございました。
できました。

SQLの書き方を勉強します。

お礼日時:2009/06/25 13:35

#1です



わかりにくかったかも知れないので念のためフォロー

CREATE TABLE `TABLE-A` (
`NO` INT( 3 ) UNSIGNED ZEROFILL NOT NULL DEFAULT '0',
`str1` VARCHAR( 30 ) NOT NULL
)

のようにテーブルをつくっておけば、NOのフィールドは
INT型で3桁の左0詰めの表示になるということです。
    • good
    • 0

#1さんのおっしゃる様に連番ふり直しは、あんまり良くないと思いますが。

。 2→002への変換なら以下の方法で出来るかと思います。

SELECT LPAD(NO-1 , 3 , '0') FROM TABLE-A WHERE NO > 2
    • good
    • 0
この回答へのお礼

yamada404さん

アドバイスありがとうございます。
SQLが分かっていないのかもしれませんので、確認させて下さい。

この方法は、
1.とりあえず連番をふり直す(DBは桁数は合っていない)
2.読み取る時に桁を合わせる
ということでしょうか。

やはり、UPDATE文では対応が出来ないでしょうか。
よろしくお願い致します。

お礼日時:2009/06/25 11:25

2点指摘します



(1)連番を振りなおすのはナンセンス。
削除したナンバーを空き番にするのが常套、ふつうは消したという
フラグだけつけておいて、データを消さない

(2)ナンバーに文字列をつかうのはどうかと。
仮に連番を管理するとしても、varcharなどで処理するのはNG
どうせやるならint(3)でゼロフィル設定をする
また、どうせ表示するにはphpなどのミドルウェアをつかうことに
なりそうですから、そちらがわでケタそろえ処理をするのが妥当
    • good
    • 0
この回答へのお礼

yambejpさん

アドバイスありがとうございます。
ご指摘の方法が綺麗なやり方だと思います。

ただ、現在いただいたデータがそうなってしまっていて、
私は修正を頼まれていて…ということで困っていたのです。

お礼日時:2009/06/25 11:19

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