select * from staff
LEFT JOIN servicereservation
on servicereservation.snic = staff.snic
where servicereservation.starttime!='04:30:00 '
AND servicereservation.endtime!='05:00:00'
OR servicereservation.snic IS NULL ;
我需要找到一天中特定时间可用的工作人员姓名。时间在服务保存表中一天在预订表中。我不知道如何映射这3张桌子。我试过这个。但没有与预订联系。请让我这样做。
答案 0 :(得分:0)
您必须使用密钥执行连接,并对相应表中的日期执行过滤。试试这个:
SELECT A.* FROM
STAFF A LEFT JOIN SERVICERESERVATION B ON (A.SNIC = B.SNIC)
LEFT JOIN RESERVATION C ON (B.RID = C.RID)
WHERE DATE_FORMAT(C.RESERVATEIONDATE, '%d/%m/%Y')=
[Your reservation date in dd/MM/YYYY string format]
AND DATE_FORMAT(B.STARTTIME,'%H:%i:%s')=
[your reservation start time in HH:mm:ss format]
AND DATE_FORMAT(B.ENDTIME,'%H:%i:%s')=
[your reservation end time in HH:mm:ss format];
有关格式化sql日期的更多信息,请参阅; image。 您应该注意,在这种情况下,这里的时间小时是24小时时间格式。所以下午1点有一个小时13。
答案 1 :(得分:0)
正常的解决方案是检查在JOIN的ON条件中从LEFT OUTER JOINed表中排除行。您可以在WHERE子句中检查NULL: -
SELECT *
FROM staff
LEFT JOIN servicereservation
ON servicereservation.snic = staff.snic
AND servicereservation.starttime != '04:30:00'
AND servicereservation.endtime != '05:00:00'
WHERE servicereservation.snic IS NULL ;
虽然我怀疑你实际上只想在开始和结束时间之间使用一次检查。