1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Access のクエリで「JOIN式はサポートされていません」が表示される場合の、予想外の原因

Posted at

Access のクエリで「JOIN式はサポートされていません」が表示される

原因が分からず、四苦八苦したので、自分のメモとして記載。

ググってみる

基本ですね、一人で長時間悩むより、詳しい人に聞いてみる。
しかし出てくる情報は あいまいな外部結合 だから、と言うモノ。
例として、3つ以上のテーブルで外部結合(OUTER JOIN)を含んだ結合を行った際、結合条件(ON句)が適切ではないという事らしい。
しかし・・・
今私が結合しているテーブルは二つ。
結合条件は単純。
でも、内部結合(INNER JOIN)だと、エラーが出ない。
外部結合(RIGHT JOIN や LEFT JOIN)だと、エラーが出る。
だから、原因は「あいまいな外部結合」なんだと思う。

前提条件

先に示しておくべきだったのでしょうが、今回の環境は下記の通り。
説明資料1.png
オラクルのデータベースとリンクされたリンクテーブル A B C が有り、A B は加工の為、クエリ A B が生成されています。
(サブクエリでやろうかと思ったけど、エラーが出た時にサブクエリが原因かと思い、この形にしました)
さてこの状態で、下記の様にクエリ AKEYCODE と、テーブル CLINKCODE を結合条件にしたクエリを作成。
説明資料2.png

エラーになるクエリー
SELECT QUERY_A.NAME TABLE_C.SUBJECT FROM TABLE_C LEFT JOIN QUERY_A ON TABLE_C.LINKCODE = QUERY_A.KEYCODE;

このようにして、クエリを作成した所、「JOIN式はサポートされていません」 のエラーが出たわけです。
こういう時、普通はクエリ A を疑うのでしょうが、ほぼ同等のデータ加工をしているクエリ B を利用強いて、下記の様に作成したクエリは、エラー無く動作するのです。
説明資料4.png

エラーにならないクエリー
SELECT QUERY_B.ADDRESS TABLE_C.SUBJECT FROM TABLE_C LEFT JOIN QUERY_B ON TABLE_C.LINKCODE = QUERY_B.KEYCODE;

クエリの結果をテーブルにしてみる(Oracleとのリンクを断つ)

そうなると、怪しいのはリンクテーブル元の、OracleDB のテーブル A
そこで、クエリ A のデータ加工内容はそのままに、テーブル作成クエリ(SELECT INTO)に変更して、テーブル A2 を作成して、それをテーブル C と外部結合する事にしました。
説明資料5.png
説明資料6.png

変更したクエリー
SELECT TABLE_A2.NAME TABLE_C.SUBJECT FROM TABLE_C LEFT JOIN TABLE_A2 ON TABLE_C.LINKCODE = TABLE_A2.KEYCODE;

こうした所、「JOIN式はサポートされていません」のエラーが出なくなりました!

結論

単純で「JOIN式はサポートされていません」が出なさそうなクエリでも、リンクテーブルの場合、リンクの環境等によって、「JOIN式はサポートされていません」のエラーが出る事がある。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?