CURDATE() ОТСУТСТВУЕТ (выберите комнату, где CURDATE() между регистрацией и оформлением заказа)

#java #mysql #sql #netbeans

#java #mysql #sql #netbeans

Вопрос:

Как я могу заставить работать мой запрос?

Я хочу получить данные из моего 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)";
  

Структура данных

введите описание изображения здесь

Комментарии:

1. Это похоже на MySQL, поэтому я добавил соответствующие теги.

Ответ №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 таблицы (я предполагаю, что она у вас есть!):

 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
                 );
  

Ответ №2:

Почему бы просто не использовать NOT BETWEEN :

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