仅检索可用座位?

时间:2011-04-11 06:58:42

标签: sql linq-to-entities

我很困惑,我怎么能只返回尚未预订的座位。

我已经给出了表格模式

在同一张桌子上存放2个座位信息的场地(每个50个座位)

然后我有一个SeatBooking表,它取得seatNumber场地和预订号码,使其成为表演的独特之处。

这个想法已经看到很多:创建一个名为SeatStatus的字段,如果Taken,则布尔数据类型设置为True,如果可用则设置为False。然后执行查询返回SeatStatus = false的所有位置。

这可以在这种情况下完成吗?

1 个答案:

答案 0 :(得分:0)

这不是您所使用的语言所特有的,但我会使用SQL LEFT JOIN来执行此操作。

基本上这种类型的连接表示您知道左侧存在(在这种情况下,座位表),但右侧(预订信息)可能不存在,因此您可能会获得空值。左侧将座位信息表加入座位预订表,选择您正在查找的性能信息。作为最终条件,检查预订信息是否为空,因为如果是,则座位尚未保留。

如果您的SQL表以其应有的方式进行优化,这是非常快的,并且您将得到结果,只有非保留席位,因此您不需要在代码中进行任何过滤,并且可以拥有SQL服务器为你做繁重的工作。 (这通常是最有效的方法)

您需要快速执行的索引是预订信息表中的座位号和性能。

以下是此查询的一般形式:

SELECT seat.* FROM seating seat LEFT JOIN bookings book ON seat.number = book.seat_number,book.performance = 'SOME PERFORMANCE ID' WHERE seat.venue = 'SOME VENUE' AND book.performance is null;

首先尝试没有'AND book.performance为null',并选择预订表以确保获得所有数据,而且重要的是,每个座位只有一行。