2011-11-12 83 views
1

對不起,我想不出更好的標題...COUNT(*)將不會顯示

所以我有這個數據庫,在那裏我有一個表「bibitems」(基本上是文本)'標籤'(標籤的文本是提交下)和'taglinks'(關聯實體之間的bibitem和標籤)

所以在我的網頁上我想顯示每個標籤,直接後面的金額文檔是根據該標籤 提交的,所以如果兩個文檔在'java'下,就是說 java(2)

SELECT 
    tags.id, 
    naamnl, 
    COUNT(*) AS 'count' 
FROM 
    tags, 
    bibitems, 
    taglinks 
WHERE 
    bibitems.id=taglinks.item_id 
    AND tag_id=tags.id 
GROUP BY 
    naamnl 

當某個標籤下存在文檔時,此功能很有用。 但是,到目前爲止還沒有使用標籤時,它不會彈出。

我希望它在閱讀內部和外部連接之間的差異這種情況下

+0

首款谷歌命中:http://lichao.net/eblog/how-to-display-0-in-conditional-group-by -report-in-count-sql-query-200808164.html –

回答

2
SELECT tags.id, 
     tags.naamnl, 
     COUNT(bibitems.id) AS 'count' 
    FROM tags 
    LEFT 
OUTER 
    JOIN taglinks 
    ON taglinks.tag_id = tags.id 
    LEFT 
OUTER 
    JOIN bibitems 
    ON bibitems.id = taglinks.item_id 
GROUP 
    BY tags.id, 
     tags.naamnl 
; 

SELECT tags.id, 
     tags.naamnl, 
     (SELECT COUNT(*) 
      FROM bibitems 
      WHERE bibitems.id IN 
       (SELECT taglinks.item_id 
        FROM taglinks 
        WHERE taglinks.tag_id = tags.id 
       ) 
     ) 
    FROM tags 
GROUP 
    BY tags.id, 
     tags.naamnl 
; 

(隨你挑。)

+0

是的,我讀了COUNT,我認爲你是對的。 –

1

顯示Java(0)。

SELECT tag.id, naamnl, COUNT(taglink.tag_id) AS 'count' 
FROM tag 
LEFT OUTER JOIN taglink ON taglink.tag_id=tag.id 
LEFT OUTER JOIN bibitem ON bibitem.id=taglink.item_id 
GROUP BY tag.id, naamnl 
+1

你測試過了嗎?因爲我非常確定當OP要求它計算爲零時,COUNT(*)將計算爲1。不是嗎? – ruakh

+1

單數與複數命名約定基於意見和個人風格。兩種慣例都可以接受。 – Jason

+0

@ruakh啊,廢話,我認爲你是對的。 –

0

喜歡的東西thisshould做到這一點。 (因爲你沒有提供完整的表模式是困難的。)

SELECT 
    i.naamnl, 
    COALESCE(t.Count, 0)  AS Count 
FROM 
    bibitems i 
LEFT JOIN 
    (
     SELECT 
     tag_id, 
     COUNT(*) AS Count 
     FROM 
     taglinks 
     GROUP BY 
     item_id 
    ) t 
ON 
    t.tag_id = i.tag_id