この直前の記事(SQL)SQLで区分などの複数の意味を持たせてるテーブルを何回も結合する方法でSQLを紹介しましたが、あのSQLをAccessで実行したら「JOIN式はサポートされていません。」というエラーが出ました。
いろいろ試したところどうやら結合条件(ON句)で下記のようにリテラルが使えないようです。
Customer.SettingDiv = 1 ←この1というリテラルがダメっぽい。
ということで、途方に暮れたのですが、同僚に聞いたところ副問い合わせを駆使することで解決しました。
下記のような感じです。(Access方言のため、JOINに括弧が入ってます)
SELECT Customer.ID , Customer.CustomerName , Customer.BloodType , BloodTypeText.Contents , Customer.Sex , SexText.Contents , Customer.Job , JobText.Contents FROM (((Customer LEFT OUTER JOIN (SELECT * FROM Setting WHERE SettingDiv =1 ) BloodTypeText ON Customer.BloodType= BloodTypeText.SettingID) LEFT OUTER JOIN (SELECT * FROM Setting WHERE SettingDiv =2 ) SexText ON Customer.Sex = SexText.SettingID) LEFT OUTER JOIN (SELECT * FROM Setting WHERE SettingDiv =3 ) JobText ON Customer.Job = JobText.SettingID)
まったく、AccessのSQLにはやられますわ。
本当は使いたくないんですが、スタンドアロンアプリのデータ保存にはmdbが一番手軽なので、OLEDB経由で仕方なく使ってます。