也許是因爲您在子查詢中缺少Group By子句?另外,你不需要第一個子查詢。
Select board...
, Coalesce(a.thread_count, 0) AS thread_count
, b.post_count
From r_forum_boards
Left Join (
Select r_forum_threads.board
, r_forum_threads.id
, Count(r_forum_threads.id) AS thread_count
From r_forum_threads
Group By r_forum_threads.board
, r_forum_threads.id
) a
On a.board = board.id
Left Join (
Select r_forum_posts.thread_id
, Count(*) AS post_count
From r_forum_posts
Group By r_forum_posts.thread_id
) As b
On b.thread_id = a.id
Order By r_forum_boards.position
您可能會考慮更改查詢稍微使其更容易測試:
Select board...
, Coalesce(a.thread_count, 0) AS thread_count
, A.post_count
From r_forum_boards
Left Join (
Select r_forum_threads.board
, r_forum_threads.id
, Count(r_forum_threads.id) AS thread_count
, Posts.post_count
From r_forum_threads
Left Join (
Select r_forum_posts.thread_id
, Count(*) AS post_count
From r_forum_posts
Group By r_forum_posts.thread_id
) As Posts
On Posts.thread_id = r_forum_threads.Id
Group By r_forum_threads.board
, r_forum_threads.id
) As A
On A.board = board.id
Order By r_forum_boards.position
通過這種方式,您可以運行一個內部查詢,並確保您得到A.結果和B.獲得post_count的值。
如果分別運行每個子查詢,它們都會給出結果嗎? – 2010-11-18 20:06:35
如果我刪除最後一個JOIN,它將返回正確的結果和正確的線程數。如果我查詢最後的JOIN,它會爲每個線程ID返回正確的帖子數。我想我需要找到一種方法來彙總每個板子的所有這些結果 – rcapote 2010-11-18 20:15:44