SQL文について質問なんですが、下記のようなテーブルがあった場合に『2を3に、3を2にする』というクエリを作ってみましたが、どうもうまくいきません。
┌─┬──┐
│No│項目│
├-┼──┤
│1│ああ│
├─┼──┤
│2│いい│
├─┼──┤
│3│うう│
└─┴──┘
strSQL1=UPDATE テーブル名 SET No = '2' WHERE No = '3'
strSQL2=UPDATE テーブル名 SET No = '3' WHERE No = '2'
これをASPから実行する場合は
cn.Execute(strSQL1)
cn.Execute(strSQL2)
とすると、先にstrSQL1が実行されテーブルが更新された後にstrSQL2が実行される
ため、
┌─┬──┐
│No│項目│
├─┼──┤
│1│ああ│
├─┼──┤
│3│いい│
├─┼──┤
│3│うう│
└─┴──┘
となってしまいます。『2つの更新を同時に実行させる』もしくは『2つの更新クエリ1つにする』というようなことはできないものでしょうか?
No.4ベストアンサー
- 回答日時:
ちょっと思ったのですが、WHERE文でNoを指定しない方がいいのでは??
フィールドが2つで、項目がユニークでなければ、Noと項目をWHERE条件にしたほう
がいいではないでしょうか?
んでもって、優先度を上げるときは、演算で[+1]とし、下げるときは[-1]でいいのでは?
例えば・・・
(1)優先度を上げるとき
strSQL1=UPDATE テーブル名 SET No = NO + 1 WHERE No = '3' AND 項目名 = 'いい'
(2)優先度を下げるとき
strSQL2=UPDATE テーブル名 SET No = NO - 1 WHERE No = '2' AND 項目名 = 'うう'
でどうでしょう??
そうなんです。
優先度の上げ下げがありますので、優先度を上げるときは(数値は小さくするので)[-1]、下げるときは(数値は大きくするので)[+1]をしました。
なおかつ、Noと項目をWHERE句にしました。
それと、#1で教えて頂いたテンポラリを使っての方法もとりいれて、
期待通りの動作をさせることができました。
ありがとうございましたm(__)m
No.5
- 回答日時:
プログラミングでする、SWAP方式でいいのではないのでしょうか。
1 ああ
2 いい←(1)
3 うう←(2)
…
90 んん
(1)の番号を最終番号(ここでは90とします)の次にして
1 ああ
91 いい←(1)
3 うう←(2)
…
90 んん
(2)の番号を目的の番号に変更して
1 ああ
91 いい←(1)
2 うう←(2)
…
90 んん
(1)を入れ替え番号にすれば、完了。
1 ああ
3 いい←(1)
2 うう←(2)
…
90 んん
3回のUPDATE文で、入れ替えできますが如何でしょうか?
#1のuratanさんのテンポラリーデータを入れて変数の入れ替えみたいにするのですね。
UPDATE テーブル名 SET No = 'Temp' WHERE No = '3'
UPDATE テーブル名 SET No = '3' WHERE No = '2'
UPDATE テーブル名 SET No = '2' WHERE No = 'Temp'
この3回のUPDATE文で解決することができました。
ありがとうございましたm(__)m
No.3
- 回答日時:
#1です。
ちょっと認識がちがっていましたね。すいません。(^_^ゞ
お聞きしたいのですが「優先度」は上がるだけではなくて、下げたりもするってことですか?
なかなかややこしい処理ですねぇ。
もちっと考えて、出直してきまっす。
No.1
- 回答日時:
データをひっくり返したいということですよね。
どうして、その必要が生じてしまったか気になる所ですが、
どちらかのSETで、テンポラリデータを入れておくっていうのはどうでしょうか?
たぶんデータ型は数値ですよね。
だからユニークな数値を決めて、3回目のExecuteで、正しい値を入れると・・・。
なんかCのポインタ交換みたいですけどね。(^_^ゞ
この回答への補足
データをひっくり返したいというか・・・。
このテーブルは優先度高い順(優先度をわかりやすくするためにNoという名前のフィールドにしました。)に並んでいて
あるレコードを選択した場合、そのレコードの優先度を上げるために、そのレコードの優先度とひとつ上のレコードの優先度を入れ替えたいのです。
どのレコードかという情報は既に取得できているので、あとはその情報を元にクエリを作成して、実行するだけなのです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
データがあれば○○なければのSQL
-
ACCESS DCOUNTの抽出条件について
-
【access】複数のフィールドの...
-
SQLServer→Access インポート
-
Access vbaで重複レコードの削...
-
抽出条件でデータ型が一致しま...
-
VBAでテーブル名とカラム名を動...
-
テーブル作成クエリを実行した...
-
「ご処理進めて頂きますようお...
-
Excelシート上のマクロを登録し...
-
エクセルで、日付を入力すると...
-
インタラクティブの反対語は?
-
CloseとDisposeの違い
-
月度は何て読みますか?
-
PDFフォームに本日の日付を自動...
-
【Excel】特定の文字を含むセル...
-
お家デートをしててハグを長い...
-
UMLでの例外処理
-
Excel ラジオボタンのリセット...
-
FFTの結果ついて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESS DCOUNTの抽出条件について
-
データがあれば○○なければのSQL
-
Access vbaで重複レコードの削...
-
ACCESS VBAでテーブル内の特定...
-
重複した複数のレコードを1レ...
-
【access】複数のフィールドの...
-
VBAでテーブル名とカラム名を動...
-
SQLServer→Access インポート
-
ACCESSで実行時エラー3008
-
別のaccessファイルからデータ...
-
ACCESSのクエリ、SQLに変数を使...
-
アクセスで定数を利用したい。
-
Accessで縦と横を入れ替えたい
-
社員名簿から検索する関数
-
sql文で削除クエリを書く
-
VB.NETでテーブルを作成
-
access vbaで前景色を指定したい
-
抽出条件でデータ型が一致しま...
-
Access BetweenとLikeの組み合...
-
DAOでSQLServerに接続し、LeftJ...
おすすめ情報