C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.1601 の関連記事表示

<< 0 >>
■1601  Re[2]: SQLで最小の空き番号を取得する方法
□投稿者/ シャノン -(2007/02/28(Wed) 12:53:14)
    2007/02/28(Wed) 12:54:33 編集(投稿者)

    No1598 (road_movie さん) に返信

    ありがとうございます。

    > こんにちは
    > Oracleは分かりませんがこちらはどうですか?
    >
    > http://codezine.jp/a/article/aid/652.aspx

    うわ、すごいシンプルですねぇ。

    自分でもさらに探して、
    http://www.accessclub.jp/bbs/0115/beginers39524.html
    というのを見つけました。

    で、
    「外部結合して NULL かどうか見るくらいなら、EXISTS 使うべきだろう」
    ということで、以下のような SQL にたどり着きました。

    教えていただいた codezine の例も、EXISTS の代わりに IN を使っているだけで、本質的には同じですね。

    SELECT
    NVL( MIN( 番号 ) + 1, 1 )
    FROM
    (
    SELECT
    番号
    FROM
    テーブル T1
    WHERE
    NOT EXISTS
    (
    SELECT
    *
    FROM
    テーブル T2
    WHERE
    T1.番号 + 1 = T2.番号
    )
    )

    ただ、テーブルが1つならこれでいいですが、実は、要件としては
    「2つのテーブルで重複しない整数値」が必要です。
    例えば、
    テーブルA:1, 3, 7
    テーブルB:2, 4, 5
    だったら、(AとBのどちらに新しいレコードを作るにせよ)次の値は6、
    その次は8である必要があります。
    こんなのをこの方法で解こうとすると結合が複雑になりすぎるので、
    「削除した番号を持つテーブル」を作るか、「2つのテーブルの
    共通部分を1つのテーブルにまとめるよう変更する」かを提案したいと思います。

    #そのような要件のないテーブルには、この結果を生かさせて頂きます。
記事No.1595 のレス / END /過去ログ10より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -