MySQLで、JAVAを使ってSQL文を作っているのですが、行き詰っています。
顧客マスタと、顧客の予約テーブルがあり、
顧客の予約テーブルには、同じ顧客の予約レコードが多数入っています。
そのマスタとテーブルの両方の情報を使いたいのでJOINし、
下記、抽出条件で、SQL文を書けないでしょうか?
■抽出条件
1.今日以降に予約があれば、全て抽出。
⇒尚、一人の顧客の予約が複数表示されてもよい=未来の全ての予約を表示。
2.今日以降に予約がなければ、昨日含めて過去の予約の内、一番最近のレコードを抽出。
⇒尚、一人の顧客の予約は、1件だけ表示。
3.予約日の大きい順で、抽出。
■テーブル概要
costomer 顧客テーブル
⇒ カラム情報: 顧客ID,顧客名,顧客住所,顧客TEL,その他・・・,論理削除フラグ:delete_flag
⇒ 顧客のレコードは、compay_idでユニーク。 2015/8/13追記
costomer_reservation 顧客予約テーブル
⇒ カラム情報ヘディングのテキスト : 顧客ID,予約日,予約時間,予約メモ,その他・・・,論理削除フラグ:delete_flag
⇒ 顧客の予約レコードが複数存在あり(過去、未来共)2015/8/13追記
2つのテーブルの紐づけは、顧客ID:costomer_id。
■書きかけのSQL文(上記のように抽出されない)
String strSQL =
// 1.今日以降に予約があれば、全て抽出。
// ⇒尚、一人の顧客の予約が複数表示されてもよい=未来の全ての予約を表示。
"SELECT costomer., costomer_reservation."
+ " FROM costomer LEFT OUTER JOIN costomer_reservation ON costomer.costomer_id = costomer_reservation.costomer_id"
+ " WHERE"
+ " (costomer.compay_id = " + iParaCompay_id + ")" // 会社ID
+ " AND (costomer_reservation.reservation_date >= CURRENT_DATE)" // 今日以降の予約日を抽出
+ " AND (costomer_reservation.delete_flag = false)"
+ " AND (costomer.delete_flag = false)"
// 2.今日以降に予約がなければ、昨日含めて過去の予約の内、一番最近のレコードを抽出。 // ⇒尚、一人の顧客の予約は、1件だけ表示。
NG? + " AND NOT EXISTS ("
NG? + " SELECT * FROM costomer_reservation as tmp"
NG? + " WHERE costomer_reservation.costomer_id = tmp.costomer_id"
NG? + " AND (tmp.reservation_date <= CURRENT)" // 過去の予約日を抽出
NG? + " AND (costomer_reservation.reservation_date < tmp.reservation_date)"
NG? + " )"
// 予約日の大きい順で抽出 + " ORDER BY costomer_reservation.reservation_date DESC";
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2015/08/11 11:02
2015/08/11 23:21
退会済みユーザー
2015/08/12 23:31
退会済みユーザー
2015/08/13 00:21 編集
2015/08/13 00:21
退会済みユーザー
2015/08/13 00:26
退会済みユーザー
2015/08/13 00:27
退会済みユーザー
2015/08/13 00:33
退会済みユーザー
2015/08/13 00:35
退会済みユーザー
2015/08/13 00:39
退会済みユーザー
2015/08/13 00:42
退会済みユーザー
2015/08/13 00:53 編集
退会済みユーザー
2015/08/13 01:46
退会済みユーザー
2015/08/13 02:23
2015/08/13 02:37
退会済みユーザー
2015/08/13 05:06