人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Accessの更新クエリに関する質問です。
以下の様なテーブルがあったとして、
|ID1|ID2|フラグ| |
| 1| 1| false| |
| 1| 2| false| |
| 1| 3| false| |
| 1| 4| false|ここ|
| 2| 1| false| |
| 2| 2| false|ここ|
| 3| 1| false|ここ|
| 4| 1| false| |
| :| :| :| |
の「←ここ」と書いた部分(同ID1内で、ID2最大のレコードについて)のフラグをtrueに更新するクエリを書きたいです。

「←ここ」と書いたレコードのみを取り出す選択クエリは容易に得られるのですが、元テーブルに対してjoin結合しても、where句に選択クエリのフィールドを与えても、いずれでも「更新可能なクエリであることが必要です。」と言われてしまいます。

「ADOなどでぐるぐる」ではなく、更新クエリでスパッと解決できると助かります。
(表組み記法がうまく使えてないかもしれません。見にくかったら申し訳ありません)

●質問者: oich
●カテゴリ:コンピュータ
✍キーワード:access クエリ フィールド フラグ レコード
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● うぃんど
●100ポイント ベストアンサー

Accesssに特化した方法となりますが、下記で確認してます

UPDATE テーブル
SET テーブル.フラグ = true
WHERE DCOUNT("*", "テーブル", "ID1=" & ID1 & " AND ID2>" & ID2) = 0

DCOUNTの第三引数(WHERE句)は下記のような式として実行されます

ID1 ID2 DCOUNTの結果
1 1 ID1=1 & AND ID2>1 3
1 2 ID1=1 & AND ID2>2 2
1 3 ID1=1 & AND ID2>3 1
1 4 ID1=1 & AND ID2>4 0
2 1 ID1=2 & AND ID2>1 1
2 2 ID1=2 & AND ID2>2 0
3 1 ID1=3 & AND ID2>1 0
4 1 ID1=4 & AND ID2>1 0

仮にID1とID2が数値ではなく文字列であった場合は下記の様にします

UPDATE テーブル
SET テーブル.フラグ = true
WHERE DCOUNT("*", "テーブル", "ID1=""" & ID1 & """ AND ID2>""" & ID2 & """") = 0

式は

|*ID1="1" AND ID2>"1"|

と展開されます

◎質問者からの返答

ありがとうございました。求めていた動作が得られました。

迅速かつ丁寧、動作原理までわかりやすいご回答、誠にありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ