2016-02-18 247 views
0

enter image description heremysql的where子句

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

'starttime'和'endtime'是什麼類型? –

+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日期的更多信息,請參閱; MySQL DATE_FORMAT() Function。 您應該注意,在這種情況下,此處的時間以24小時時間格式表示。因此,下午1點有一個小時13.

0

正常的解決方案是在JOIN的ON條件中將檢查從LEFT OUTER JOINed表中排除。在你可以只檢查是否爲NULL的WHERE子句中: -

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 ; 

雖然我懷疑你真的想只使用一個單一的時間開始和結束時間之間的支票。