在“预订”表格中,我保留了客户预订的详细信息(日期/时间/行号)。 在“座位”表中,我保存了剧院中所有座位(行号和区域)的详细信息。
此查询的目的是将Seat连接到Booking以通过在Seat中显示相应Booking RowNumber中具有空条目的那些行来查看所占用的座位。这是代码:
SELECT s.Zone, s.RowNumber
FROM Booking b JOIN Seat s
ON s.RowNumber = b.RowNumber
WHERE b.PerfDate = '2016-12-12'
AND b.PerfTime = '20:30:00'
AND b.RowNumber is null;
接受代码,但结果返回为带有最后一个AND语句的空集,或者仅显示没有它的预订中的内容。显而易见的是我使用的逻辑有些不对,但是当我阅读它时,我无法指出它是我想要做的事情。可能是一个明显的错误,但一些帮助将不胜感激。
提前谢谢。
[编辑 - 我发现了逻辑错误......事实是我要求具体的日期和时间,我想要的记录根据定义没有那些,但不知道如何绕过它,似乎喜欢捕获22。]
答案 0 :(得分:2)
您需要使用LEFT JOIN
,并将不匹配行的所有条件放入ON
子句中。
SELECT s.zone, s.RowNumber
FROM Seat AS s
LEFT JOIN Booking AS b
ON s.RowNumber = b.RowNumber AND b.PerfDate = '2016-12-12' AND b.PerfTime = '20:30:00'
WHERE b.RowNumber IS NULL