DOBON.NET DOBON.NETプログラミング掲示板過去ログ

3つ以上のテーブルをJOIN

分類:[.NET]

環境 winXP .net2002 access2000

アダプター構成のクエリビルダにて3つ以上のテーブルをJOINしようと、
以下のSQLを書いてみました。
SELECT 省略
FROM
order INNER JOIN
shoplist ON order.shop_id = shoplist.shop_id
LEFT OUTER JOIN
employeelist ON order.employee_id =employeelist.employee_id

これで実行すると”演算子がありません”とエラーがでます。
ウイザードで作成しても上記のようにSQLが表示されます。
そこで
(order INNER JOIN
shoplist ON order.shop_id = shoplist.shop_id)
LEFT OUTER JOIN
employeelist ON order.employee_id =employeelist.employee_id
としてSQL構文の確認をすると、"データベースに確認されました"という
メッセージがでるにも関わらず、"()"が取り除かれます。
さらに実行すると”演算子がありません”とエラーがまたでます。
なんとか"()"部分を強制認識させるような記号などはありませんでしょうか?
よろしくお願いします。
こんばんは、りきさん。ピラルクです。

確認してませんが、orderというテーブル名が
ORDER BYで使う予約語だから何かおかしい状態
になっているのでは?

"order"を全部"[order]"で囲ってもダメですか?
■No2118に返信(ピラルクさんの記事)
> こんばんは、りきさん。ピラルクです。
>
> 確認してませんが、orderというテーブル名が
> ORDER BYで使う予約語だから何かおかしい状態
> になっているのでは?
>
> "order"を全部"[order]"で囲ってもダメですか?

ピラルクさん早速のレス有難うございます。
ご指摘の部位ですが、囲ってもだめです。どうもINNER JOINしている2つのテーブルを一意のテーブルとして認識できていないようです。ASで別名をつけてもだめ。

以下のようにすると例外的にとりあえず3つのテーブルを結合しますので
3つのテーブルを仕様としてJOINできないわけでもないようです。
order INNER JOIN
shoplist ON order.shop_id = shoplist.shop_id,employeelist

また片方(2つ)だけのJOINなら正常に動作しますので、テーブルに問題が
あるわけでもない。と正直頭を抱えております。
IDE自体がおかしいのでしょうか?バージョンはenterpriseですが・・・
えーと自己解決できましたが、今回の件は????という思いで一杯です。
説明しますと以下のようにSQLを書くとエラー表示されるにも拘わらず、
クエリビルダで実行できてしまいビルド後もまともに動くようです。
アダプタのウイザードでもSELECT句のエラーが表示されますがこの現象は
私だけなのでしょうか?できれば情報お待ちしております。(ちなみにorderは実際のテーブル名とは違います。ごめんなさい。)
FROM
(order INNER JOIN
shoplist ON order.shop_id = shoplist.shop_id)
LEFT OUTER JOIN
employeelist ON order.employee_id =employeelist.employee_id;
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板