我正在使用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条件的约束,所以我猜这就是为什么我的查询无效。
关于我应该尝试使这项工作的任何想法?我将非常感谢任何建议。非常感谢!
答案 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