2011-07-12 70 views
9

我有一個表(Threads)包含一個字段(id)。我想選擇Threads中的每一行,以及表Posts中的行數,其中字段Posts.threadThreads.id相同。T-SQL從不同的表中選擇並計數?

這怎麼能在SQL中完成?

(事情是這樣的僞SQL:SELECT *, COUNT(* FROM Posts WHERE Posts.id=Threads.id) FROM Threads

回答

12
SELECT t.id, COUNT(p.thread) 
FROM Threads AS t 
    LEFT OUTER JOIN Posts AS p 
     ON t.id = p.thread 
GROUP BY t.id 
+0

打開帖子,這是我剛纔給的確切答案。 – Treborbob

+0

你應該使用左連接,否則你不會獲得每一行 –

+0

@ t-clausen,是的,我同意。 –

30

當然 - 這樣的事情?

SELECT 
    t.ThreadID, 
    (SELECT COUNT(*) FROM dbo.Posts p WHERE p.ThreadID = t.ThreadID) 
FROM 
    dbo.Threads t 
+1

謝謝,完美!我會在9分鐘內接受它。 – Ryan

+1

如果你真的只想要ID(或只是幾列,而不是加載),那麼我希望Waqas Raja的回答使用join&group by來執行比這更好的方法。 – Treborbob

+0

我們如何排序'(SELECT COUNT(*)FROM dbo.Posts p WHERE p.ThreadID = t.ThreadID)'column? –