質問: クエリで「データ型が一致しません」と表示される クエリ1とクエリ2をクエリ3で結合するとクエリ3で「データ型が一致しません」と表示されます。 クエリ1のsql文 select trim(replace([pc管理台帳.使用者氏名]," ","")) as 式1, pc管理台帳.新pc名, pc管理台帳.部署名, pc管理台帳.マシンベンダ名, pc管理台帳.マシンモデル from pc管理台帳; クエリ1では[使用者氏名]の苗字と名前のスペースを置換しました。 クエリ2のsql文 select 職員アカウント.職員番号, trim(replace([職員アカウント.氏名]," ","")) as 式1, 職員アカウント.パスワード, 職員アカウント.メールアドレス from 職員アカウント; クエリ2では[氏名]の苗字と名前のスペースを置換しました。 クエリ3で[使用者氏名]と[氏名]が一致しているものを抽出したいです。 ちなみにクエリ3のsql文は select [クエリ2].[式1], [クエリ2].[職員番号] from クエリ1 inner join クエリ2 on [クエリ1].[式1]=[クエリ2].[式1]; これでクエリ3をひらくと 「データ型が一致しません」 と表示されます。 どなたかアドバイスお願いします
回答: 「データ型が一致しません」のエラーが発生するパターンのひとつに、『結合に使用している演算 フィールド(ご質問の件では式1が該当)の結果がエラーとなるレコードが含まれている』というのが あります。 クエリ1・クエリ2の式1にはreplace関数が使われていますが、replace関数の第1引数にnullを 指定すると、エラーになります。 従って、恐らく「pc管理台帳」テーブルの「使用者名」か、「職員アカウント」テーブルの「氏名」の どちらか(或いは双方)が、空欄(null)になったままのレコードがある可能性があります。 (なお、trim関数は、第1引数がnullであってもエラーになりません) 上記推測が当たっていれば、 a)上記フィールドが空欄になっているレコードをなくす (その上で、今後のことを考えると値要求を「はい」に設定しておくことをお勧めします) b)式1の関数を下記のように変更する のどちらかの対応をされれば、ご質問のエラーは解消されるものと思います。 式1の変更で対応する場合は、それぞれ以下のようにしてみてください: (「[pc管理台帳.使用者名]」と「[職員アカウント.氏名]」は、それぞれ「[pc管理台帳].[使用者名]」と 「[職員アカウント].[氏名]」の誤記と判断して記述しています) クエリ1: select replace(nz([pc管理台帳].[使用者氏名], ""), " ", "", 1, -1, 1) as 式1, pc管理台帳.新pc名, pc管理台帳.部署名, pc管理台帳.マシンベンダ名, pc管理台帳.マシンモデル from pc管理台帳; クエリ2: select 職員アカウント.職員番号, replace(nz([職員アカウント].[氏名], ""), " ", "", 1, -1, 1) as 式1, 職員アカウント.パスワード, 職員アカウント.メールアドレス, from 職員アカウント; nz関数は、第1引数がnull(=文字列扱い不可の空白)だった場合に、第2引数の値に置換する関数 です。第2引数に「""」(空文字=文字列扱い可の空白)を指定することで、replace関数がエラーに なるのを回避しています。 replace関数の一番最後の引数「1」は、半角/全角を区別させないためのものです。これにより、 スペースは全て削除されるため、trim関数は不要になります。 (その前の「1, -1」は、それぞれ開始位置と置換する文字数の指定です。この辺りは、詳しくは ヘルプを確認して下さい)