2016-10-23 4 views
0

どのように私のクエリを動作させることができますか?CURDATE()NOT IN(チェックインとチェックアウトの間でCURDATE()を選択する部屋を選択してください)

今日の日付がリストされていないSQLからデータを取得したいとします。ここで

は私のクエリです:

String sql = "select Room, Name, Age, EmailAddress, Phone, Nationality, CheckIn, CheckOut from customer where CURDATE() NOT IN (SELECT Room FROM customer WHERE CURDATE() between CheckIn and Checkout)"; 

Data Structure

enter image description here

+0

これはMySQLのように見えるので、適切なタグを追加しました。 –

答えて

0

理由だけではなく、NOT BETWEENを使用しない:

SELECT Room, Name, Age, EmailAddress, Phone, Nationality, CheckIn, CheckOut 
FROM customer 
WHERE CURDATE() NOT BETWEEN CheckIn AND Checkout 
+0

私の仕事に感謝します! –

1

これはあなたのクエリです:あなたのデータ構造を知らなくても

select c.* 
from customer c 
where CURDATE() NOT IN (SELECT c2.Room 
         FROM customer c2 
         WHERE CURDATE() between c2.CheckIn and c2.Checkout 
         ); 

またはクエリをしたい正確に何そうするためには、それは本当に難しいことですクエリーは必要です。

しかし、Roomという列がcurdate()に匹敵していたのは本当に本当に本当に珍しいデータモデルでした。私はそれがあなたの問題の少なくとも一部だと考えています。

あなたがroomsテーブルで開始し、今日で計上されていない部屋を取得したい場合は(私はあなたが1を持っていると仮定し!):

select r.* 
from rooms r 
where not exists (select 1 
        from bookings b -- a more natural name for a table with bookings 
        where curdate() between b.CheckIn and b.CheckOut 
       ); 
関連する問題