这个mySQL逻辑出了什么问题?

时间:2016-12-02 18:55:34

标签: mysql

在“预订”表格中,我保留了客户预订的详细信息(日期/时间/行号)。 在“座位”表中,我保存了剧院中所有座位(行号和区域)的详细信息。

此查询的目的是将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。]

1 个答案:

答案 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