我有三個表Mysql場景 - 即使沒有條目,也可以獲取所有任務嗎?
Tasks
與同列TaskId, EmpNum, WorkedDate, Hoursspent
現在我想相處某一週的所有任務條目列Taskid, EmpNum
TaskEntries
列Taskid, Taskname
TaskAllocations
。在這裏,我的問題是即使沒有Taskentry的特定任務,我應該得到至少一行TaskId,Taskname的Querys結果集中的小時數爲Null。我一直試圖用下面的查詢來獲得這個。 SELECT A.TaskId,
B.TaskName,
SUM(C.HoursSpent) as TotalHours ,
C.WorkedDate, C.Comments
FROM TaskAllocations A
LEFT OUTER JOIN TaskEntries C
ON A.TaskId = C.TaskId
AND A.EmpNum = C.EmpNum
INNER JOIN Tasks B
ON A.TaskId = B.TaskId
WHERE A.EmpNum =123456
AND C.WorkedDate
IN ('2010-01-17','2010-01-18','2010-01-19',
'2010-01-20','2010-01-21','2010-01-22','2010-01-23')
GROUP BY A.TaskId, C.WorkedDate
ORDER BY A.TaskId,C.WorkedDate ASC ';
什麼我得到這個SQL塊是當且僅當有特定任務ID的條目,那麼只有我得到了一個列。但是我想要的是爲EmpNum提供的每一個任務獲得至少一行。即使我爲每個TaskId和WorkedDate組合獲得一行也沒有問題。請幫我解決一下這個。這樣做的實際意圖是構建一個HTML二維表,其中每個任務條目的日期和任務如下所示。
--------------------------------------------------------- TaskId TaskName Sun Mon Tue Wed Thu Fri Sat --------------------------------------------------------- 18 name1 2 3 4:30 3:30 19 name2 20 name3 4 2:30 22 name4 2:30 23 name5 24 name6 1:30 6 ---------------------------------------------------------
因此,這可以由用戶每年更新一週。首先我想到group_concat,但由於性能,我正在使用普通組查詢。
注意:對於特定的taskid和WORKDATE,只會有一個小時的入口。 我幾乎建立了前端。即使沒有條目,請幫助我像上面那樣獲取所有任務ID。我是否需要使用子查詢?
是的,我做了同樣的..使用左外連接。但我需要在其他桌子上進行內部連接。所以三個表格有一個左側和一個內側聯接 – 2010-01-17 16:03:54
爲什麼當你看到它不工作時你需要一個內部聯接?如果你在任務和任務中心上進行內部連接(就像在你的代碼示例中一樣),你將只在有任務和任務條件時纔會獲得行。你需要所有的任務,甚至那些沒有條目的,所以不要使用內部連接。 – knittl 2010-01-17 16:34:04
內部連接在第三個表上,即任務只有TaskName。左連接是在TaskAllocations和TaskEntries ..我甚至刪除了EmpNum上的左外連接,只保留左連接只有taskid但沒用。 – 2010-01-18 05:36:55