sqldistingejoin-按顺序匹配两个表

时间:2019-05-11 11:17:57

标签: sql

我拥有一家旅馆。客房(桌子房)按床位数和大小分类。现在,我想将来宾请求(表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    |

我尝试使用独特的联接,但是找不到解决方案。游标当然可以,但是必须有更好的方法。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

这个评论太长了。

首先,我从未听说过在分配房间时没有考虑日期的酒店,但这是另一回事。

更重要的是,这种类型的匹配不适用于SQL。 SQL可以生成请求匹配房间的所有可能性。但是,提出确定的单个映射是不合适的。

为什么?首先,有许多这样的解决方案。在您的小示例中,可以为Muller和King分配房间5和6,但可以按照两种顺序。对于两场比赛,只有两种可能性。考虑一下您是否有10个相同的房间和10个相同的请求。这些可以分配多少种不同的方式?您想选择哪一个?

如果匹配模糊,这将变得更加棘手,因为它们与请求不完全匹配。也就是说,您剩下国王,但您的最后一个房间有两张床,但很大。在现实世界中的问题中,您将必须做出多个判断,以确定哪一个最好。

这是一个优化问题。这实际上可能是一个线性编程问题(我不喜欢早上这么认真地思考)。如果是这样,它具有确定性和最佳算法,不需要搜索所有可能的分配。