SSブログ

クエリ 更新クエリ・集計クエリを元にした更新ができない [クエリ]

 ACCESSのデータベースエンジンにある、限界の一つです。
 更新クエリ(UPDATE)で項目を更新するクエリを作る場合に、更新する値に集計クエリの結果を使用しようとした場合、「更新可能なクエリであることが必要です。」というエラーがでます。

 具体的な再現手順は、以下のとおり。


 テストに使うデータテーブルは2つ。
 「T実績」に日別担当者別のデータがあります。これを、日付毎に集計します。
 その結果を、「T実績集計」テーブルの各日付に更新するとします。

 最初に、「T実績」を日別に集計するクエリを作成します。

 結果はこの通り。

 このクエリの結果を、「T実績集計」テーブルに書き込むクエリを作成します。

 普通に作ると、こんな感じでしょうか。
 これを実行すると、

 エラーになり、実行できません。

 また、サブクエリ・相関サブクエリを含むUPDATEも、エラーになります。

 回避策は、集計結果でテーブルを作成して、そのテーブルを元にUPDATEを行います。

 もしくは、DLookUPを使用したクエリにします。

 UPDATEのSQLで、DLookUPを使用するのは、処理速度的にどうかと思うところがあります。

 私的には、前者の方が、確認作業等もやりやすいと思うので、推奨です。

 ちなみに、SQLServerやOracleの場合は、このような制限はありません。

 MicroSoftの参考情報
http://support.microsoft.com/kb/328828/ja


nice!(0)  コメント(4)  トラックバック(0) 

nice! 0

コメント 4

kawa

困っていました。

>回避策は、集計結果でテーブルを作成して、そのテーブルを元にUPDATEを行います。

この発想はありませんでした。目からウロコです。

ページも初心者にもわかりやすい丁寧表示で助かりました。
ありがとうございました。


by kawa (2014-01-24 08:55) 

NZ

kawaさん、コメントありがとうございます。
参考になれば幸いです。

便利なACCESSですが、時々こういう不便な仕様に遭遇します。
SQLServerやOracleなどではできるので、ちょっと残念です。

説明は画像多めを心がけています。
普通のBlog記事の作成方法だと、画像を扱うのは面倒なので、ここはホームページビルダーのBlog機能で記事を作成しています。
ホームページビルダーのBlog機能については、不満に思う点も多いのですが、大量の画像を貼り付けた記事を、そこそこ楽に作成できるので、手放せません。
変なバグが多いので嫌なんですが、今のところ代わりが見つかりません…。
by NZ (2014-01-24 22:26) 

aliceblue

はじめまして!

わたしも、今、初心者ながら悪戦苦闘しつつも
業務用DBを作成しているところです。

集計をしたいのに、集計クエリを使うと更新できないし、
Dsum関数+Val関数を使うと、ものすごく処理に時間がかかるしで、
困り果てていました。

貴重なアイディアをどうもありがとうございました^ ^
by aliceblue (2014-02-06 13:51) 

NZ

aliceblueさん、はじめまして。
コメントありがとうございます。

ACCESSは97くらいから使っているのですが、
この仕様はずっと変わっていないようです。
データベースエンジン自体も
強化して頂きたいものです。

業務用DBの作成、がんばってください。
by NZ (2014-02-07 00:16) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。
※URL(リンク)は記述できません。

トラックバック 0

トラックバックの受付は締め切りました

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。