簡體   English   中英

如何在MySQL查詢中盡可能覆蓋值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM