JAVAで、MySQLを組んでいます。
SQL文を勉強中なのですが、下記が実現できなく悩んでおります。
間違い等、ご指摘頂ければ幸いです。 ※尚、このSQLは、別の方が教えてくれたものです。
初心者なので、何をどう説明してよのか?や
元データ や 抽出データ例 などを 具体的に、表現できないので申し訳ございません。
問題点は、
1つ目.下記のSQL文で、「2.」が実現できません。
※「1.」は、実現できています。
2つ目.reservation_date は、date型ですが、start_time 項目もあり、厳密に予約を比較したいので、
reservation_date + start_time を一つにして、datetime型で、下記「2.」を実施したいのです。
■仕様
// 1.今日以降に予約があれば、全て抽出。
// ⇒尚、顧客IDで、DISTINCTは不要で、全ての予約を表示。
// delete_flag = false のみ抽出。
UNION
// 2.昨日含めて過去に予約があれば、一番最近のレコードを1件のみを抽出。
// delete_flag = false のみ抽出。
以下が、SQL文で。
このまま MySQL Frontに貼り付けると、実行できます。
しかし、
・UNIONの前のSQLに該当するレコードは抽出できますが、
・UNIONより後ろのSQLに該当するレコードは、抽出されません。
(SELECT cos., res. FROM customer cos INNER JOIN customer_reservation res ON cos.customer_id = res.customer_id
WHERE
res.reservation_date >= CURRENT_DATE
AND (cos.company_id = 41)
AND (cos.delete_flag = false)
AND (res.delete_flag = false)
AND true = (
(yomi_sei LIKE '%きたむら%')
OR (yomi_mei LIKE '%きたむら%')
)
)
UNION (SELECT cos., res. FROM customer cos INNER JOIN (
SELECT * FROM customer_reservation r1
WHERE NOT EXISTS (SELECT * FROM customer_reservation r2
WHERE
r1.customer_id = r2.customer_id
AND r1.reservation_date < CURRENT_DATE
AND r1.reservation_date < r2.reservation_date
AND (r1.company_id = 41)
AND (r1.delete_flag = false)
) ) res ON cos.customer_id = res.customer_id
WHERE
(cos.company_id = 41) AND (cos.delete_flag = false) AND (res.delete_flag = false)
AND true = (
(yomi_sei LIKE '%きたむら%') OR (yomi_mei LIKE '%きたむら%')
)
);
回答2件
あなたの回答
tips
プレビュー