2009-12-27 66 views
2

我有兩個數據庫表,「列表」和「注意事項」。
列表中的列_id,LISTNAME
Notes有列_id,檢查,LIST_ID(這是Lists._id的外鍵),多列不相關的這個問題。如何在選擇COUNT()函數的同時連接SQL表?

我想創建一個返回四列的查詢:
Lists._id,Lists.listname,此列表中所有選中Notes的計數,此列表中所有Notes的計數。

查詢應來自列表返回所有條目。

我能得到的計數和_ids & listnames seperately,使用下面的查詢

SELECT _id, listname FROM Lists 
SELECT count(checked) FROM Notes WHERE checked='1' and list_id=foo_id 
SELECT count(*) FROM Notes WHERE list_id=foo_id 

在這些語句,foo_id指列表_id我想計數檢查和總物品。

有人能告訴我我怎麼可能把這些都變成一個查詢?

積分爲拋出AS在那裏的數列。

回答

8

編輯:新增IFNULL返回0當外部聯接返回任何行count_checked;添加別名。

SELECT 
    l._id, 
    l.listname, 
    IFNULL(SUM(n.checked), 0) AS count_checked, 
    COUNT(*) AS count_total 
FROM lists l 
LEFT OUTER JOIN notes n ON (l._id = n.list_id) 
GROUP BY l._id, l.listname 
+0

我從來沒有這樣做過,我可以使用SUM來獲取選中的列!好想法。 GROUP BY是我錯過的部分。謝謝 – CodeFusionMobile 2009-12-27 15:17:31

+0

解決了一個問題。如果「筆記」中沒有匹配,則SUM(checked)返回null。我需要它默認返回0。 – CodeFusionMobile 2010-01-02 16:26:52

+0

@CSharperWithJava:你說得對,我添加了一個'IFNULL'來避免這個問題。 – 2010-01-02 18:38:27

1
SELECT _id, listname, 
    (SELECT count(checked) FROM Notes WHERE checked='1' and Notes.list_id=Lists.list_id) AS count_checked, 
    (SELECT count(*) FROM Notes WHERE Notes.list_id=Lists.list_id) as count_all 
    FROM Lists 
+0

看起來像什麼,我會拿出,但是我一直在尋找的東西多一點優雅。 – CodeFusionMobile 2009-12-27 15:13:57