我拥有一家旅馆。客房(桌子房)按床位数和大小分类。现在,我想将来宾请求(表guest_req)与可用房间进行匹配。
| <table guest_req> | | <table rooms> |
| Name | Req_Beds | Req_Size | | RoomNo | Beds | Size |
-------------------------------- -------------------------
| Muller | 2 | small | | 1 | 1 | small |
| Smith | 1 | small | | 2 | 1 | small |
| Jones | 1 | large | | 3 | 1 | large |
| Owen | 1 | small | | 4 | 2 | large |
| King | 2 | small | | 5 | 2 | small |
| James | 2 | large | | 6 | 2 | small |
我的select语句应带来以下结果:
| Name | RoomNo |
--------------------
| Muller | 5 |
| Smith | 1 |
| Jones | 3 |
| Owen | 2 |
| King | 6 |
| James | 4 |
我尝试使用独特的联接,但是找不到解决方案。游标当然可以,但是必须有更好的方法。有什么建议吗?
答案 0 :(得分:1)
这个评论太长了。
首先,我从未听说过在分配房间时没有考虑日期的酒店,但这是另一回事。
更重要的是,这种类型的匹配不适用于SQL。 SQL可以生成请求匹配房间的所有可能性。但是,提出确定的单个映射是不合适的。
为什么?首先,有许多这样的解决方案。在您的小示例中,可以为Muller和King分配房间5和6,但可以按照两种顺序。对于两场比赛,只有两种可能性。考虑一下您是否有10个相同的房间和10个相同的请求。这些可以分配多少种不同的方式?您想选择哪一个?
如果匹配模糊,这将变得更加棘手,因为它们与请求不完全匹配。也就是说,您剩下国王,但您的最后一个房间有两张床,但很大。在现实世界中的问题中,您将必须做出多个判断,以确定哪一个最好。
这是一个优化问题。这实际上可能是一个线性编程问题(我不喜欢早上这么认真地思考)。如果是这样,它具有确定性和最佳算法,不需要搜索所有可能的分配。