MySQL查询输出免费席位

时间:2017-11-05 16:14:22

标签: mysql sql

我正在使用MySql中的影院预订系统,我有三张桌子:

Production (contains Title, BasicTicketPrice), 
Performance (PerformanceDate, PerformanceTime, Title) 
Booking (Email of person who booked, PerformanceDate, PerformanceTime, RowNumber).

我需要编写一个只显示一列的查询:来自Booking的RowNumber但它只需要在PerformanceTime 19:00:00显示PerformanceDate 2017-11-01上可用的座位。

到目前为止,我试过了:

SELECT RowNumber
FROM booking
WHERE Email IS NULL

因为每个用户都可以使用他们的电子邮件预订机票,但电子邮件受到NOT NULL条件的约束,所以我猜这就是为什么我的查询无效。

关于我应该尝试使这项工作的任何想法?我将非常感谢任何建议。非常感谢!

1 个答案:

答案 0 :(得分:0)

以下有时被称为“左排除连接”,它是LEFT OUTER JOIN,它通过performanceDate将预订与表演联系起来,但随后排除了所有匹配的行。这样您只需在该演出时间可用的预订行。

SELECT
      *
FROM booking b
LEFT OUTER JOIN Performance p ON b.PerformanceDate = p.PerformanceDate
WHERE p.PerformanceDate IS NULL

<强> BUT

我怀疑你错过了一张桌子,这只是一个座位列表。如果没有这个,我认为上述查询可能不会产生任何行,假设只有在收到预订时才会在预订表中输入一行,因此该表中可能不存在可用的座位。 /强>

克服缺乏座位表的低效方法是生成一个独特的席位列表。 e.g。

SELECT
      s.seat_number
FROM (select distinct row_number as seat_number from booking) s
LEFT JOIN booking b on s.seat_number = b.row_number
LEFT JOIN Performance p ON b.PerformanceDate = p.PerformanceDate
WHERE p.PerformanceDate IS NULL