我需要在以下作业中进行最佳SQL查询。 我有这些表:
host: idhost
table: idtable, idhost
reservation: idtable, start, stop
我需要那些在一段时间(2014-03-03 12:00 - 2014-03-03 14:00)有任何免费桌面的主持人。
我使用此查询(我确定这会给出正确的结果)
SELECT idhost FROM idhost WHERE idhost NOT IN (
SELECT idhost FROM host INNER JOIN table USING (idhost) INNER JOIN reservation USING (idtable)
WHERE :start BETWEEN start AND stop OR :stop BETWEEN start AND stop OR :start < start AND stop > :stop)
但是有人说以下查询更快并且返回同一个主机,但我不确定:
SELECT * FROM host
JOIN table USING (idhost)
LEFT JOIN reservation ON reservation.idtable = table.idtable AND
:start >= reservation.start AND :stop <= reservation.stop
WHERE reservation.idtable IS NULL
它是否正确且更快?或者有更好的查询?
提前谢谢!