SSブログ

AccessでUPDATEの更新値でサブクエリを使えない DMaxを使えばエラーにはならない [Accessクエリ]

えーと本日はAccessでのサブクエリの話題である。

DSC_1228[1].jpg

先日、Accessで他のテーブルにある値で更新かけたいんだけど、と言った質問を受けた。
何も考えずに、サブクエリ使えば良いのでは?
と答えたのだが、サブクエリを使うと「更新可能なクエリであることが必要です」のエラーになるというではないか。

えーそうなの?と思いSQLポケットリファレンス を見てみると...

UPDATE命令のサブクエリを使って更新のところをみると...



の注意書きが...
自分で書いておいて忘れていた。

じゃあ、結合して参照すれば?
と手のひら返しで答えたのではあるが、AccessってUPDATEでFROM句書けたっけか?

AccessではUPDATEにFROM句は書けないが、INNER JOINできる。

UPDATE foo INNER JOIN bar ON foo.a = bar.a SET foo.a = bar.b
WHERE c = 1


みたいに書けば良いらしい。ふーん。SQLポケリには書いてないなぁ。しまった。

でも単純に結合したテーブルの列を参照して更新するわけにはいかないようで、この作戦も失敗。
どうも結合すると複数行のデータが出てきてしまい、サブクエリでMAXを使わないといけないらしい。

どうしたものかとネットを検索しているとDMaxなら使えるような記事を発見。

そうか、DMaxなら使えるのか。前に記事を書いたかも。



DSumやらDMaxは、定義域集合関数っていう関数でサブクエリみたいな集合関数である。Access独自の関数である。詳しくは上の関連記事を参照して欲しい。

以下のクエリはAccessではエラーになるが

UPDATE foo SET a = (SELECT MAX(b) FROM bar) WHERE c = 1


以下のクエリなら実行可能。

UPDATE foo SET a = DMAX("b", "bar") WHERE c = 1


結論としては

AccessでUPDATEでサブクエリは使えないが、定義域集合関数なら使えるっていうこと。

本日は以上


DSC_1228[1].jpg

サイト内を検索

nice!(0)  コメント(9) 
共通テーマ:携帯コンテンツ


Copyright Atsushi Asai Google+朝井淳
[改訂第4版]SQLポケットリファレンス

[改訂第4版]SQLポケットリファレンス

  • 作者: 朝井 淳
  • 出版社/メーカー: 技術評論社
  • 発売日: 2017/02/18
  • メディア: 単行本(ソフトカバー)

イラストで理解 SQL はじめて入門

イラストで理解 SQL はじめて入門

  • 作者: 朝井 淳
  • 出版社/メーカー: 技術評論社
  • 発売日: 2019/05/16
  • メディア: 単行本(ソフトカバー)

[データベースの気持ちがわかる]SQLはじめの一歩 (WEB+DB PRESS plus)

[データベースの気持ちがわかる]SQLはじめの一歩 (WEB+DB PRESS plus)

  • 作者: 朝井 淳
  • 出版社/メーカー: 技術評論社
  • 発売日: 2015/03/03
  • メディア: 単行本(ソフトカバー)

Access クエリ 徹底活用ガイド ~仕事の現場で即使える

Access クエリ 徹底活用ガイド ~仕事の現場で即使える

  • 作者: 朝井 淳
  • 出版社/メーカー: 技術評論社
  • 発売日: 2018/05/25
  • メディア: 大型本