|
Снова прошу помощи, нужна помощь в составлении запроса.
|
|||
---|---|---|---|
#18+
Всем привет, снова прошу о помощи. Недавно писал похожую тему всем спасибо огромное за ответы. Думал, что смогу оптимизировать тот запрос под свою БД. Но не хватает знаний как расставить условия. Есть две таблицы: Application: -id; -check_in - дата заезда; -check_out - дата выезда; -status; -room_id Room: -id; -type; -number; Поля для объеденения Application.room_id = Room.id. Нужно вывести все Room из таблицы room (where room.status='AVAILABLE'), кроме тех которые есть в application с (status = 'CONFIRMED') и (('2021.01.07'<check_in<'2021.01.09') или ('2021.01.07'<check_out<'2021.01.09')); т.е. нужно вывести все комнаты доступные комнаты, которые не забронированы в заявках на промежуток между числами '2021.01.07' и '2021.01.09' Вот пример создания БД и ее заполнения. CREATE SCHEMA `test` ; CREATE TABLE IF NOT EXISTS `test`.`room` ( `id` BIGINT PRIMARY KEY NOT NULL AUTO_INCREMENT, `type` ENUM ('THREE_STARS', 'FOUR_STARS', 'FIVE_STARS') NOT NULL, `status` ENUM ('AVAILABLE', 'NOT_AVAILABLE','DELETED') NOT NULL, `number` INT NOT NULL ); insert into room (type,status,number) values ('THREE_STARS','AVAILABLE',11); insert into room (type,status,number) values ('THREE_STARS','AVAILABLE',12); insert into room (type,status,number) values ('THREE_STARS','NOT_AVAILABLE',13); insert into room (type,status,number) values ('FOUR_STARS','AVAILABLE',21); insert into room (type,status,number) values ('FOUR_STARS','DELETED',22); insert into room (type,status,number) values ('FOUR_STARS','AVAILABLE',23); CREATE TABLE IF NOT EXISTS `test`.`application` ( id BIGINT PRIMARY KEY NOT NULL AUTO_INCREMENT, check_in DATE NOT NULL, check_out DATE NOT NULL, status enum ('IN_PROGRESS', 'CONFIRMED','DELETED') NOT NULL, room_id BIGINT default null ); insert into application (check_in,check_out,status,room_id) values ('2021-01-01','2021-01-03','IN_PROGRESS',0); insert into application (check_in,check_out,status,room_id) values ('2021-01-06','2021-01-08','CONFIRMED',11); insert into application (check_in,check_out,status,room_id) values ('2021-01-01','2021-01-03','CONFIRMED',12); insert into application (check_in,check_out,status,room_id) values ('2021-01-06','2021-01-10','CONFIRMED',23); Запрос должен вывести комнаты с номерами 12 и 21. Буду рад любым советам, ответам, ЗДРАВОЙ КРИТИКЕ. Заранее спасибо за помощь. P.S. Отвечу сразу тем кто подумал "лентяй не хочет разобраться". В sql совсем новичок пишу учебный проект на java, нужно работать с БД, но знаний для написания таких запросов нет и нескольких свободных дней для изучения этой темы просто нет (горит сдача проекта). Буду также благодарен за ссылки на годные ресурсы или книги, что бы потом разобраться с sql. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2021, 14:41 |
|
Снова прошу помощи, нужна помощь в составлении запроса.
|
|||
---|---|---|---|
#18+
alex228 Поля для объеденения Application.room_id = Room.id. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2021, 15:01 |
|
Снова прошу помощи, нужна помощь в составлении запроса.
|
|||
---|---|---|---|
#18+
alex228, Так а что именно не получается? Вы же условия сформулировали, осталось выборку написать. Код: sql 1. 2. 3. 4. 5. 6.
P.S. Я бы 'NOT_AVAILABLE' заменил на 'UNAVAILABLE', стилистически приятнее и нет надобности в подчеркивании. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2021, 15:12 |
|
Снова прошу помощи, нужна помощь в составлении запроса.
|
|||
---|---|---|---|
#18+
Akina, Вы совершенно правильно пишете, исправил: insert into application (check_in,check_out,status,room_id) values ('2021-01-01','2021-01-03','IN_PROGRESS',0); insert into application (check_in,check_out,status,room_id) values ('2021-01-06','2021-01-08','CONFIRMED',1); insert into application (check_in,check_out,status,room_id) values ('2021-01-01','2021-01-03','CONFIRMED',2); insert into application (check_in,check_out,status,room_id) values ('2021-01-06','2021-01-10','CONFIRMED',6); Спасибо за замечание. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2021, 15:31 |
|
Снова прошу помощи, нужна помощь в составлении запроса.
|
|||
---|---|---|---|
#18+
Gluck99, Спасибо за ответ, проблема в том, что не знаю как синтаксис использовать, по поводу 'UNAVAILABLE' хорошее замечание. Буду разбираться уже проще будет =) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2021, 15:34 |
|
Снова прошу помощи, нужна помощь в составлении запроса.
|
|||
---|---|---|---|
#18+
alex228 Gluck99, не знаю как синтаксис использовать Я бы рекомендовал вам потратить день на изучение JOIN'ов. Потому что фактически 95% запросов (хоть немного сложных) - это JOIN'ы. Всякие функции, синтаксис - шелуха. Если вы не осознаёте, как работает соединение таблиц, вы не можете даже начать решать задачу. Понять саму суть можно за час. Выработать навык через эксперименты и упражнения - дня хватит. После этого у вас словно прояснится в голове. Но для этого надо собраться с силами и сделать волевое усилие. Сейчас праздники, попробуйте потратить на JOIN'ы день - почитайте теорию, посоставляйте запросы, поэкспериментируйте с разными выборками. Бесконечно спрашивать на форуме - пустое дело. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2021, 15:59 |
|
|
start [/forum/topic.php?fid=47&msg=40034038&tid=1828246]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
173ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 283ms |
0 / 0 |