我有一個簡單的文章和評論表。我想顯示文章及其評論。我想與一個選擇與評論和另一個選擇沒有在同一張桌子上的評論聯合。我有1條評論和文章編號2,沒有評論,文章編號3有2條評論。COUNT裏面UNION ALL導致跳過預期結果
在文章表:
articles.id | articles.content
1 | test article
2 | test another
3 | test third
的意見表:
comments.id | comments.aid | comments.comment
1 | 1 | bad one
2 | 3 | very good
3 | 3 | good
我用下面的查詢得到的結果。
SELECT articles.id AS article_id,
comments.id AS comment_id,
comment
FROM articles
LEFT JOIN comments ON comments.aid = articles.id
UNION ALL
SELECT articles.id AS article_id,
NULL,
NULL
FROM articles
GROUP BY article_id
ORDER BY article_id DESC
結果我得到的這是正確的:
article_id | comment_id | comment
3 | 3 | good
3 | 2 | very good
3 | NULL | NULL
2 | NULL | NULL
2 | NULL | NULL
1 | NULL | NULL
1 | 1 | bad one
現在,如果我想我也加算到查詢計數的意見,並就變成:
SELECT articles.id AS article_id,
comments.id AS comment_id,
comment ,
COUNT(DISTINCT comments.id) AS count_comments
FROM articles
LEFT JOIN comments ON comments.aid = articles.id
UNION ALL
SELECT articles.id AS article_id,
NULL,
NULL ,
NULL
FROM articles
GROUP BY article_id
ORDER BY article_id DESC
現在加入計數列後結果發生變化,並且並非所有行都輸出:
article_id | comment_id | comment | count_comments
3 | NULL | NULL | NULL
2 | NULL | NULL | NULL
1 | NULL | NULL | NULL
1 | 1 | bad one | 3
現在,除了第1條的註釋外,不顯示註釋,對於2選擇命令,ID(2)應該顯示兩次,而ID(3)應該顯示3次(第2次選擇命令爲1,而2第一個選擇命令,有2條評論)
,我希望正確的結果:
article_id | comment_id | comment | count_comments
3 | 3 | good | 2
3 | 2 | very good | 2
3 | NULL | NULL | NULL
2 | NULL | NULL | NULL
2 | NULL | NULL | NULL
1 | NULL | NULL | NULL
1 | 1 | bad one | 1
我不知道爲什麼加計導致的部份。
感謝
好得多,如果你可以給樣本數據與表格格式所需的輸出。 –
做一個單獨的查詢來獲得計數... –
這不會是一個查詢,因爲我將不得不爲每個輸出行做它......如果在一個查詢中完成,它會好得多@nathanhayfield –