mysql - 涉及多个左连接的非常复杂的查询

时间:2014-12-26 09:11:53

标签: mysql join left-join

MySQL的: BIG食品盒有几条平行的 100英寸的线。食品盒中的位置非常重要,因此跟踪英寸非常重要。

食品盒的每个隔间决定为4英寸,总共25个隔间。

用户可以以一对一的关系填写每一行,这意味着每行一个用户。

UserCompartments: (UserId, PositionStart, PositionEnd) - > (9,52,100),(8,44,77)。

每个隔离专区也有几行,用户需要并行处理多个服务器的帮助,因此无需检查服务器是否与另一个服务器重叠。

Servers: (ServerId, ServerPositionStart, ServerPositionEnd, LineId, UserId) - > (7,55,98,4,9),(8,53,77,9)。此表中的范围始终是User表的相应范围的子集。

ServerBooking: (CompartmentId, ServerId, UserId) -> (4, 7, 9) CompartmentId将从1-25开始,因为总共有25个盒子。

某些服务器可能无法用于某个英寸位置。

ServerTemporaryOutage: (ServerId, ContainerId) 

某些服务器可能超出其常规可用性。

ServerTemporaryAvailability (ServerId, PositionStart, PositionEnd)

现在我想根据隔间而不是英寸来获取结果,让用户看到它并决定将哪个服务器分配给哪些未预订的隔间,但问题是

1)所有东西都是以英寸为单位(ServerBooking和ServerTemporaryOutage除外),而我想要根据containerid得到结果,只是除法不会削减它,因为它对位置非常敏感。

2)我需要在预订之前获取临时停机和临时可用性,以便让用户看到哪个服务器正在做什么。我知道某种左联将会在那里,但显然这没有意义:

Select ?? from Server 
join UserCompoartments u on s.userid = ...
left join serverbooking sb on  sb on sb.serverid = s.serverid and sb.userid = s.userid
left join servertemporaryoutage so on so.serverid = s.serverid
left join servertemporaryavailibility sa on sa.serverid = s.serverid 

这不会给我我想要的东西:

CompartmentId (1...25), Server-Statuses: Available, Booked, Overtime, Outage  

结果应该有25行,因为有25个隔间。

0 个答案:

没有答案