アプリ版:「スタンプのみでお礼する」機能のリリースについて

名簿のテーブルが下記の構成です。
id 数値の型で主キー
名前 テキストの型

データが次の様になっている。
1 山田
2 太郎
3 花子

ここで、idを順にプラス1してそれぞれを
2 山田
3 太郎
4 花子

と言う様に名簿のテーブルのデータを更新したい。

これを単に
update 名簿 set id=id+1;

では、id=2と3に付いては主キーとなっている為にデータは更新されな
い。なので、一旦idを降順にしたテーブルを作ってから更新クエリを実
行すれば問題は無いと思う。

この様な動作をサブクエリを使って、一つのクエリにしたいのですが。
Access2007のクエリではこの様な事は出来るのでしょうか。

宜しく回答願います。

質問者からの補足コメント

  • うーん・・・

    有難う御座います。
    回答はああすればとか、こうすればとかはでは無くて。
    直にsqlを書いて下さい。

    この場合の回答は、sqlだけです。この様な事と言うのは、
    例えば、mysqlの場合は、
    update 名簿 set id=id+1 order by id desc;

    で解決します。この様な事がAccess2007の場合は
    どうなのかと言う事ですよ。

    今迄の回答は、全て回答になっていません。
    宜しく、回答願います。

    No.3の回答に寄せられた補足コメントです。 補足日時:2017/04/11 21:17
  • うーん・・・

    update tbl set id=id+1 order by id desc;
    上は間違っていて、

    update 名簿 set id=id+1 order by id desc;
    です。無いテーブルの更新クエリは最初から
    動きませんので。

    失礼しました。

    No.4の回答に寄せられた補足コメントです。 補足日時:2017/04/11 21:24
  • うーん・・・

    サブクエリを使った更新クエリで動かそうとするから
    大変なので有って。これを普通に二段階で動かすので
    有れば、そんなには難しくは有りません。

    然し、他のデータベースではこれは一発の更新クエリ
    で動きます。だから、他のが出来るのならば。尚更
    Access2007の場合でも動かそうと思いました。

    この二段階のやり方に付いては、色々と方法は有ります。
    それは、私の悩む所では有りません。その部分は解決
    しています。

      補足日時:2017/04/11 21:31
  • うーん・・・

    この問題の一番簡単な解決と言うのは、
    降順の選択クエリーを作って、その選択クエリ
    に対して更新クエリをする方法です。

    この二段構えが一番簡単な方法です。
    もう暫くは、このままとしますが。

    回答が無いと判断をした場合は即刻閉めさせて
    頂きます。

      補足日時:2017/04/11 21:50
  • うーん・・・

    降順の更新クエリは
    SELECT * FROM 名簿 ORDER BY id DESC;

    idを+1する更新クエリは
    UPDATE 降順名簿 SET id = [id]+1;

    ここで、別名のaliasのasを使って、降順名簿の所に
    何とかして、SELECT * FROM 名簿 ORDER BY id DESC
    を持って来ての記述が出来れば。目的は達成すると思うが。

    その様な記述が出来るのかを知りたいと言う事です。
    私は、sqlでもasを使った記述のsqlを知らない。

    asを使えば出来そうな気はしますが。
    宜しく回答願います。

      補足日時:2017/04/11 22:54
  • プンプン

    UPDATE (SELECT * FROM 名簿 ORDER BY id DESC) AS tbl SET tbl.id = [id]+1;

    上記で問題が解決しました。
    自己解決しましたので、閉じます。

    ShowMeHowさん、この様な回答を何故早急に出さなかったのでしょうか。
    これが、私の求める回答ですよ。

    今後、この様に他の人の質問に回答をする場合は頓珍漢な回答はしないで下さい。
    質問をした人が大迷惑をしますので。

    今回の私の場合は、偶々自己解決をしましたので問題は有りませんが。
    必らずしも、この様なケースとは限りませんので。自戒を宜しくお願いします。

    これにて、閉じます。

      補足日時:2017/04/11 23:24

A 回答 (4件)

一つにまとまっていないね。


ANo3は無視してください
この回答への補足あり
    • good
    • 0
この回答へのお礼

有難う御座います。

update tbl set id=id+1 order by id desc;
上記は、Access2007の場合は、残念ながらエラーになります。

だから、これ以外の他に動く記述は無いのかと言う話です。
この様に、直にsqlでの記述での回答をお願いします。

宜しく回答願います。

お礼日時:2017/04/11 21:22

二段階クエリでよければ、idの最大数より大きい数を足して、それより1少ない数をひけばいいんじゃね?

この回答への補足あり
    • good
    • 0
この回答へのお礼

有難う御座います。

貴方は、何回言っても分からない人ですね。
だから、二段階は駄目だと言って居るでしょう。何回も、何回も。

質問の趣旨を理解していない人の回答は謹んで下さい。
二段階にすれば、出来ると言う事は質問の最初に書いて
いる事は、日本語が分かる人は、当に分かっていますよ。

お礼日時:2017/04/11 21:12

アクセスが作成するidというオートナンバーのフィールドの値は変更できませんので、


メインキーである限り変更はできません。
    • good
    • 0
この回答へのお礼

有難う御座います。
idは数値の型でオートナンバーでは有りません。

メインキーでも、この場合は、idを降順にした
テーブルで更新クエリを作れば、更新は出来ます。

この場合は二段構えになります。
質問の趣旨は、この二段構えの2つの一連の操作を
一つにまとめてサブクエリを使っての
一発更新クエリをする為のsqlを教えて下さい。

と言う物です。
質問の趣旨を理解してから回答願います。

よろしくお願いします。

お礼日時:2017/04/11 21:05

主キーを外せばよいのでは?

    • good
    • 0
この回答へのお礼

有難う御座います。
主キーは外したくないので。

主キーを外さない方法での解決を望んでいます。

宜しく回答願います。

お礼日時:2017/04/11 20:46

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