3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

(SQL)Accessでは結合条件にLiteralが書けない!?

この直前の記事(SQL)SQLで区分などの複数の意味を持たせてるテーブルを何回も結合する方法SQLを紹介しましたが、あのSQLAccessで実行したら「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)


まったく、AccessSQLにはやられますわ。
本当は使いたくないんですが、スタンドアロンアプリのデータ保存にはmdbが一番手軽なので、OLEDB経由で仕方なく使ってます。