不在,在声明中不起作用(预订)
Posted
技术标签:
【中文标题】不在,在声明中不起作用(预订)【英文标题】:not in, in statement not working (booking) 【发布时间】:2018-05-03 11:00:31 【问题描述】:我很长一段时间以来一直试图进行 SQL 查询来检查酒店房间是否在两个日期之间可用,但我无法让它工作(它在 mysql 上显示错误)。看来问题出在声明的第一部分。该语句检查不在“已预订”表中的可用房间 ID。当我执行语句的第一部分(下面的代码)它显示一个空列(没有房间 ID,只有列名)编辑:Mysql 没有更新表,这部分问题没有修复
我正在查询显示两个日期之间的可用房间
SELECT rom_id
FROM
seka2804_hotelbestilling.rom
where
rom_id not in (
SELECT * FROM seka2804_hotelbestilling.bestilit_rom;
);
这是整个查询
SELECT rom_id
FROM seka2804_hotelbestilling.rom where romtype_id=$type-rom
AND rom_id NOT IN
(
select rom_id
from seka2804_hotelbestilling.bestilit_rom
where (innsjekk >= @start and innsjekk < @end)
or (utsjekk >= @start and utsjekk < @end))
ER- 图 图片网址:https://imgur.com/a/MQxeMgX
【问题讨论】:
“不工作”是什么意思?你想做什么?样本数据和期望的结果会有所帮助。sql query for checking if an hotel room is availeble between two dates,
->select rom_id from seka2804_hotelbestilling.bestilit_rom where (innsjekk >= @start and innsjekk < @end) or (utsjekk >= @start and utsjekk < @end))
在第一段代码中,在最后一个 )
之前有一个额外的 ;
。删除它,然后重试。
您提供了一个无效的查询,但没有描述它意味着要做什么。据我所知,想要在两个日期之间未预订的所有房间的列表。但是您不清楚如果在您查询的日期范围的 一些 内预订了房间该怎么办。您拥有的是WHERE room NOT IN (Rooms where the CheckIn or CheckOut are in the date range)
如果签入在该日期范围之前并且结帐在该日期范围之后,您不会将其过滤掉。
您可能想要NOT IN (SELECT room FROM boookings WHERE CheckIn < @end AND CheckOut > @start)
... 这将排除为任何部分预订的房间> 您要查询的范围。
【参考方案1】:
也许您的 date 过滤器应该来自 outer query
而不是来自 subquery
SELECT rm.rom_id
FROM seka2804_hotelbestilling.rom rm
WHERE NOT EXISTS (SELECT 1 FROM seka2804_hotelbestilling.bestilit_rom
WHERE rom_id = rm.rom_id) AND
((innsjekk >= @start and innsjekk < @end) OR
(utsjekk >= @start and utsjekk < @end));
【讨论】:
以上是关于不在,在声明中不起作用(预订)的主要内容,如果未能解决你的问题,请参考以下文章