我在数据库中有两个表,它们的属性如下:
Booking
=======
booking_id
booking_start
booking_end
resource_booked
===============
booking_id
resource_id
第二个表是"Booking"和"Resource"之间的关联实体(即,1个预订可以包含多个资源)。属性booking_start和booking_end是带有日期和时间戳的时间戳。
我想知道如何为每个resource_id(resource_booked)找出日期/时间是否与类似resource_id的其他预订重叠或冲突?
我在纸上画了答案的图示,看看它是否能帮助我想象如何解决这个问题,结果是:
- 将两个表(Booking、Booked_resource)连接成一个表,具有所需的4个属性。
- 按照此处建议的方法进行操作:查找重叠(日期/时间)行一张表中
我真的很感激任何帮助! 谢谢!
编辑:
我正在阅读Renshaw先生的回答,并尝试自己做一个以查看我是否理解了它,结果是:
SELECT
a.*
FROM
(SELECT
b.creation_date,
b.booking_id,
r_b.resource_id,
b.booking_start,
b.booking_end
FROM Booking b
INNER JOIN resource_booked r_b ON b.booking_id = r_b.booking_id) as a,
(SELECT
b.booking_id,
r_b.resource_id,
b.booking_start,
b.booking_end
FROM Booking b INNER JOIN resource_booked r_b ON b.booking_id = r_b.booking_id) as
WHERE
a.resource_id = b.resource_id
AND
a.booking_id <> b.booking_id
AND
a.booking_start BETWEEN b.booking_start AND b.booking_end
AND
a.creation_date >= b.creation_date
我认为我试图创建2个相同的表,并通过 resource_id 连接它们,查找具有相似资源 ID 但不同预订 ID 的记录,并查看一个预订 ID 的 booking_start datetime 是否在另一个预订 ID 的 booking_start 和 booking_end 之间。
这非常混乱,我甚至不确定我的查询是否符合我的意图,但出乎意料的是,我得到了与 Renshaw 先生相同的答案!