Mysql where子句

Mysql where子句,mysql,Mysql,我需要找到在一天的特定时间可用的工作人员姓名。时间在服务预订表中,日期在预订表中。我不知道如何映射这3张表。我试过这个。但没有联系到预订。请告诉我一种方法。您必须使用键执行联接,并对相应表中的日期执行筛选。试试这个: 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.


我需要找到在一天的特定时间可用的工作人员姓名。时间在服务预订表中,日期在预订表中。我不知道如何映射这3张表。我试过这个。但没有联系到预订。请告诉我一种方法。

您必须使用键执行联接,并对相应表中的日期执行筛选。试试这个:

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日期的详细信息,请参阅。
您应该注意,在这种情况下,这里的小时是24小时时间格式。因此,下午1点有一个小时13。

正常的解决方案是在连接条件为ON的情况下,检查是否从左侧外部连接表中排除行。您只需在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 ;

虽然我怀疑您实际上只想使用开始时间和结束时间之间的单个时间检查。

开始时间和结束时间是什么类型的。您可能应该包括一个示例数据,看起来您需要解决重叠时间
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 ;