[英]How to override values if possible in mysql query
我嘗試將員工的工作時間存儲在mysql表中。 在表working_hour
我存儲正常工作時間:
id employee weekDay start end
1 1 2 10:00:00 18:00:00
2 1 3 10:00:00 18:00:00
3 1 4 10:00:00 14:00:00
4 1 5 10:00:00 12:00:00
5 1 6 10:00:00 18:00:00
6 1 7 00:00:00 00:00:00
7 1 1 00:00:00 00:00:00
在第二張表中,我存儲“特殊”工作時間。 我在那里存儲疾病,假期或只是特定日期的定制工作時間之類的東西。 working_hour_specia
l表如下所示:
id start end type
2 12013-03-12 00:00:00 2013-03-13 23:59:59 ill
那就是我嘗試過的:
SELECT
IFNULL(working_hour_special.start, working_hour.start) AS startTime,
IFNULL(working_hour_special.end, working_hour.end) AS endTime,
type
FROM
working_hour_special LEFT JOIN
working_hour ON working_hour.employee_id = working_hour_special.employee_id
WHERE
working_hour_special.start = DATE('2013-03-13') AND
employee_id = 1 AND
working_hour.weekDay = DAYOFWEEK('2013-03-13')
問題出在哪里。 我需要特定員工特定日期的開始和結束時間。 有人知道該怎么做嗎?
首先,它的表格設計不佳。 一個星期只有一天,另一個星期則是完整的日期/時間戳。 與1月1日第1周的周日相比,7月26日這一周沒有區別。
其次,當您有一個左聯接,然后將該表放入WHERE子句(不考慮對NULL進行測試)時,它基本上會創建一個普通的INNER JOIN。
因此,您可能正在尋找的是將與SPECIAL相關聯的WHERE組件轉換為條件的JOIN部分……類似。
SELECT
IFNULL(working_hour_special.start, working_hour.start) AS startTime,
IFNULL(working_hour_special.end, working_hour.end) AS endTime,
type
FROM
working_hour_special
LEFT JOIN working_hour
ON working_hour.employee_id = working_hour_special.employee_id
AND working_hour_special.start = DATE('2013-03-13')
WHERE
employee_id = 1
AND working_hour.weekDay = DAYOFWEEK('2013-03-13')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.