![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
SQL初心者です。
ACCESSでSQL文を記述していますが、どうもうまくいきません。
まず、「顧客マスタ」と「問合せ履歴」というテーブルがあります。
「顧客マスタ」は1顧客1レコードの状態、「問合せ履歴」は1顧客に対してN個のレコードがあります。
「顧客マスタ」
顧客ID|顧客名|顧客住所|・・・・
1 |田中 |東京 |
2 |石井 |神奈川 |
3 |斉藤 |千葉 |
4 |藤井 |東京 |
「問合せ履歴」
顧客ID| 登録日 |問い合わせ内容|・・・・
1 |2000/11/04 |新規注文 |
1 |2001/05/04 |追加注文 |
2 |2005/07/19 |事前打合せ |
2 |2005/07/30 |見積依頼 |
4 |2014/01/11 |現地調査依頼 |
4 |2014/06/04 |新規注文 |
両方のテーブルに「顧客ID」が存在するので、これをキーにLEFTJOINして、顧客マスタの全件と、問合せ履歴のある顧客については問い合わせ内容を結合したいと考えています。
出力結果を1顧客1レコードのユニークな状態にしたい、且つ問合せ履歴のある顧客は最も古い問合せのレコードを結合したいと考え、以下のSQL文を記述したのですがうまくいきません。
=====
SELECT 顧客マスタ.*, 問合せ履歴.*
FROM 顧客マスタ LEFT JOIN 問合せ履歴 ON 顧客マスタ.顧客ID = 問合せ履歴.顧客ID
LEFT JOIN (SELECT MIN(問合せ履歴.登録日),問合せ履歴.顧客ID FROM 問合せ履歴 GROUP BY 問合せ履歴.顧客ID) AS T1
ON 顧客マスタ.顧客ID = T1.顧客ID;
=====
どうすればうまくいくでしょうか。分かりにくいかもしれませんが、よろしくお願いします。
No.1ベストアンサー
- 回答日時:
SELECT
A.*
, B.*
FROM
顧客マスタ A
LEFT JOIN ( SELECT
B.*
FROM
問合せ履歴 B
WHERE
B.登録日 = ( SELECT
MIN(登録日)
FROM
問合せ履歴 C
WHERE
B.顧客ID = C.顧客ID
)
) B
ON A.顧客ID = B.顧客ID
![「ACCESSでのSQL文」の回答画像1](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/a/288764_57959778737fe/M.png)
No.2
- 回答日時:
なお、ACCESSでLEFT JOINを複数利用する場合、()で括ってやらないとダメなようです。
SELECT
顧客マスタ.*
, 問合せ履歴.*
FROM
( 顧客マスタ
LEFT JOIN 問合せ履歴
ON 顧客マスタ.顧客ID = 問合せ履歴.顧客ID
)
LEFT JOIN ( SELECT
MIN(問合せ履歴.登録日)
, 問合せ履歴.顧客ID
FROM
問合せ履歴
GROUP BY
問合せ履歴.顧客ID
) AS T1
ON 顧客マスタ.顧客ID = T1.顧客ID
ただし、このクエリでは、T1内に存在する顧客IDが合致するものすべてを抽出してしまうので、1顧客IDに対して複数レコードを抽出してきてしまうため、間違いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 経営情報システム accessでの請求管理について 12 2022/06/11 16:20
- その他(データベース) accessについて 2 2022/05/31 16:58
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
- その他(法律) この場合、不正ログインになりますか? 1 2022/04/16 22:28
- Java リレーションエンティティクラスとは何ですか? 2 2023/02/10 00:02
- Access(アクセス) 対象月の2桁表示について 1 2023/01/07 05:08
- 会計ソフト・業務用ソフト 事業内容に適した、見積・請求書・顧客管理ソフト、システムを探しています。 2 2022/11/11 13:28
- その他(開発・運用・管理) マイクロソフト製品のライセンス販売で困ってます 1 2022/06/30 19:52
- その他(セキュリティ) fx口座開設し疑問があったのでfx業者のサポートの人にログインIDを教えてる所を間違ってログインパス 1 2022/03/24 17:33
- 経営情報システム 起業とサービス価格設定 3 2023/04/12 11:29
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Access VBAでクエリーのレコー...
-
データベースの1要素に複数デー...
-
Accessのwhere条件式について教...
-
顧客ごとの情報を1レコードにする
-
複数のフィールドから条件を抽出
-
Accessデータベースで行と列を...
-
シングルクォーテーションとダ...
-
【続続】Access2002で連番のつ...
-
リレーションシップの設定について
-
Access2013VBA 複数のテーブル...
-
Access IF文でテーブルに存在し...
-
ADOでレコードを閉じるタイミン...
-
顧客IDを入力すると顧客名や住...
-
Access2000 テーブルのデザイン...
-
Accessを使って独自の顧客管理...
-
Access2002でレポート(納品書)...
-
Accessで名寄せグループの関係...
-
Accessのクエリについて
-
ACCESSで重複したデータがある...
-
顧客番号の振られていないデー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Access IF文でテーブルに存在し...
-
Access VBAでクエリーのレコー...
-
データベースの1要素に複数デー...
-
ワードでの単純作業の効率化に...
-
ACCESS2003 Aアクロバットを介...
-
Access フォームのデータがテー...
-
ワードで保存するファイル名の...
-
Accessデータベースで行と列を...
-
Access 既に開いているフォー...
-
ACCESS で マクロの中でフィ...
-
Accessで名寄せグループの関係...
-
顧客IDを入力すると顧客名や住...
-
ADOでレコードを閉じるタイミン...
-
文字化け、記号の含まれるフィ...
-
Access クロス集計クエリについて
-
Access 縦(行)のデータを横(列)...
-
シングルクォーテーションとダ...
-
テーブル1 2 3 の結合
-
Access レコードロックについて...
-
Accessフォームからのデータ登...
おすすめ情報
なお、ACCESSのエラーの内容は「演算子がありません」というものでした。。根本的に考え方が間違っているのでしょうか。。。