mysql:8889
From: ML account <ML account <ml@xxxxxxxxxx>>
Date: Tue, 02 Mar 2004 23:40:55 +0900
Subject: [mysql 08889] Re: 整数フィールドの次の空きを探す sql は
こんにちは。 柴垣 <akiro@xxxxxxxxxx>さんの <20040302164032.72C8.AKIRO@xxxxxxxxxx> "[mysql 08888] Re: 整数フィールドの次の空きを探すsql は" > > そのシーケンシャルのテーブルを t_seq として > > > > select min(t.id) from t_seq left join t using (id) > > where t.id > 2 and t_seq.id is null group by t.id; > > > > で、いかがでしょう? > > わたしも、似たような方向では考えてみているのですが、 > (上のSQL文は、下記のようでしょうか? t_seq が跳びの > ないシーケンシャルなファイルとすると、以下のように > なると思うのですが、シーケンシャルテーブルの意味が > 私の了解と違うのかもしれません。) かわじさんのやり方は、テーブルt_seqに全ての数をあらかじめ入れておくも ので、抜けを捜す段階でt_seqを作り直す、というものでは無いと思いますよ。 > ただし、この方法では、シーケンシャルテーブルをどう > やって作るかが、問題になります。例えば、整数1から > 整数2までのシーケンシャルテーブルを作るにはどうすれば > いいのでしょうか。はじめに auto increment のフィールドに > 整数1をいれ、その後、(整数2−整数1)個のnull データを > 追加する、といった方法しか今のところ思いつきません。 プログラムを使えば良いと思います。 CでもPerlでもJavaでも、それこそ shellででも。 create table t_seq (id int not null primary key) なテーブルにidが0から100のレコードを挿入する事をshell(bash)で行 うとすれば、 id=0; while [ $id -le 100 ]; \ do echo "insert into t_seq(id) values($id)" | mysql some-db; \ let id++; done の様なものになると思います。 > > 何の目的で数字の抜けを捜さなければならないのか > > とりあえず、先方の要求なのですが、ランダムに使っている数字を > ムダなく使い切りたい、そのための候補を自動的に提示したい、 > といった用途です。 お客さんの要求、それは大変ですね。で、その「ムダなく使い切りたい」が本 当に重要なんでしょうか。今となっては手遅れとも思いますが、本当にそうやら なければならないのかの調査が必要でしょう。 [mysql 08885]の(2)の方法は、ぼくの周辺では「スロット」と呼ばれるやり方 です。一般に何と呼ばれているのかは知りません。かわじさんのleft joinの方 法よりも (検索と更新で)速度的に有利と考えますが、テーブル設計を失敗する と一層のストレージの無駄が発生しかねない方法ですね。 松枝知直 <tomom@xxxxxxxxxx> http://www.argus.ne.jp/~tomom/
8880 2004-03-02 15:16 [柴垣 顕郎 <akiro@xx] 整数フィールドの次の空きを探す sql は 8882 2004-03-02 15:59 ┣[KAWAJI Shinya <kawaj] 8883 2004-03-02 16:04 ┃┗[KAWAJI Shinya <kawaj] 8888 2004-03-02 20:50 ┃ ┗[柴垣 <akiro@xxxxxxxx] -> 8889 2004-03-02 23:40 ┃ ┗[ML account <ml@xxxxx] 8890 2004-03-03 08:47 ┃ ┗[KAWAJI Shinya <kawaj] 8894 2004-03-03 09:28 ┃ ┣[柴垣 <akiro@xxxxxxxx] 8899 2004-03-03 12:54 ┃ ┃┗[Seiji Uramoto <uramo] 8895 2004-03-03 10:11 ┃ ┣[ML account <ml@xxxxx] 8898 2004-03-03 12:35 ┃ ┗[班石悦夫 <madara@xxx] 8900 2004-03-03 14:44 ┃ ┗[ML account <ml@xxxxx] 8885 2004-03-02 16:19 ┣[ML account <ml@xxxxx] 8886 2004-03-02 18:48 ┗[班石悦夫 <madara@xxx]