2015年2月9日月曜日

[MSAccess] クエリ定義の SELECT で指定されている別名が循環参照を発生させています

関数を使う項目にカラムと同名で別名を付ける場合は、循環参照となってしまう。

(例)
SELECT Min(価格) As 価格
[エラーメッセージ] クエリ定義の SELECT で指定されている別名 '価格' が循環参照を発生させています。


これは、Microsoft Access では SELECT 句内の項目を参照できるために発生するもので、この解決方法としてはカラムがあるテーブル名を指定してやれば良い。

(対策例)
SELECT Min([商品].価格) As 価格


この仕様を利用すると、Oracle等では1階層のクエリでは実装できないことができる。

(例)
SELECT
  1 AS COL1,
  2 AS COL2,
  COL1 + COL2 AS COL3

ORA-00904: 'COL1' 無効な識別子です。

Microsoft Access であれば、SELECT 句内の項目は参照することができるので、このSQL は実行可能である。

上記SQLの結果
COL1 COL2 COL3
---- ---- ----
1    2    3