テーブル1にはID、日付1(フィールド)があり、テーブル2にはID2、日付2、携帯があります。
選択クエリでID1とID2はリレーションを貼りました。
日付1、日付2の値がイコールのもの、かつ携帯フィールドがブランクでないものを
抽出したいです。ただし日付1、日付2では日付フォーマットが別々です。
日付1では、yyyymmdd、日付2ではyyyy/mm/ddです。これらを考慮してどのように
抽出条件を指定すればよいでしょうか?
Select * From テーブル1 Inner Join テーブル2
On テーブル1.ID1 = テーブル2.ID2
AND テーブル1.日付1 = Format(テーブル2.日付2,"YYYYMMDD")
Where テーブル2.携帯 is not NULL and テーブル2.携帯<>""
これでいけると思いますが、このSQLではテーブル2にあってテーブル1にはないデータについては抽出されません。このデータを抽出するには
Select * From テーブル2 Left Join テーブル1
On テーブル2.ID2 = テーブル1.ID1
AND Format(テーブル2.日付2,"YYYYMMDD")=テーブル1.日付1
Where テーブル1.ID1 is NULL
になります。
Select * From テーブル1 Inner Join テーブル2
On テーブル1.ID1 = テーブル2.ID2
AND テーブル1.日付1 = Format(テーブル2.日付2,"YYYYMMDD")
Where テーブル2.携帯 is not NULL and テーブル2.携帯<>""
これでいけると思いますが、このSQLではテーブル2にあってテーブル1にはないデータについては抽出されません。このデータを抽出するには
Select * From テーブル2 Left Join テーブル1
On テーブル2.ID2 = テーブル1.ID1
AND Format(テーブル2.日付2,"YYYYMMDD")=テーブル1.日付1
Where テーブル1.ID1 is NULL
になります。
SQL教えていただきありがとうございます。現在、デザインビューでクエリを作成するからクエリを作っています。format関数ですが、抽出条件の所に、=Format([日付1],'yyyymmdd')といった形で入力すればよいのでしょうか?これをやると日付1のデータが空になります。
SELECT T1.*, T2.* FROM テーブル1 AS T1, テーブル2 AS T2 WHERE (T1.ID1 = T2.ID2) AND (T1.日付1 = Replace(T2.日付2, "/", "")) AND (trim(T2.携帯) <> "");
※日付1も日付2もテキスト型なのでFORMATは使えません。
(一度数値あるいは日付型に変換してからだから面倒)
※Accessのバージョンを聞き忘れましたが
2000ではReplace関数はクエリ内では使えませんので、
標準モジュールに自作関数を作って呼ぶという手になります。
※数字は全て半角で書いてありますので、実際のものにあわせてください。
※動作確認はしてません。あしからず。
ありがとうございます、できました!
SQL教えていただきありがとうございます。現在、デザインビューでクエリを作成するからクエリを作っています。format関数ですが、抽出条件の所に、=Format([日付1],'yyyymmdd')といった形で入力すればよいのでしょうか?これをやると日付1のデータが空になります。