2014-12-09 125 views
0

因此,即使沒有任何與列表相關的任務,該查詢也會返回結果1。如何解決它,所以它返回零的任務列表爲0?MySQL查詢計數返回錯誤值

SELECT 
    l.list_id, l.list_name, l.list_time_created, 
    COUNT(CASE WHEN t.task_id IS NULL THEN 0 ELSE 1 END) AS numberOfTasks, 
    SUM(CASE WHEN t.task_completed IS NULL THEN 0 ELSE t.task_completed END) AS numberOfCompletedTasks 
FROM list l 
LEFT JOIN task t ON l.list_id = t.list_id 
WHERE l.user_id = ':user_id' 
GROUP BY l.list_id; 

回答

1

如果沒有任務,那麼這些行將被過濾掉。你想要一個left join

SELECT l.list_id, l.list_name, l.list_time_created, 
     COUNT(t.task_id) AS numberofTasks, 
     SUM(t.task_completed = 1) AS numberofCompletedTasks 
FROM list l LEFT JOIN 
    task t 
    ON l.list_id = t.list_id 
WHERE l.user_id = ':user_id' 
GROUP BY l.list_id; 

我引入了表別名。這些使查詢更容易編寫和閱讀。

我也簡化了numberofCompletedTasks的邏輯。你的原始公式是好的(甚至是標準的SQL),但是MySQL有一個很好的捷徑。

+0

它很漂亮。問題出在SUM和COUNT表達式上。用這種方式寫出來的結果如預期的那樣。先生非常感謝您! – 3ND 2014-12-09 13:43:11