2011-07-12 33 views
9

Tôi có một bảng (Threads) có chứa một trường (id). Tôi muốn chọn mọi hàng từ Threads, cũng như số hàng trong bảng Posts trong đó trường Posts.thread giống với Threads.id.T-SQL Chọn và đếm từ bảng khác nhau?

Làm cách nào để thực hiện điều này trong SQL?

(Một cái gì đó như thế này pseudo-SQL: SELECT *, COUNT(* FROM Posts WHERE Posts.id=Threads.id) FROM Threads)

Trả lời

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

Pipped để đăng bài, đây là câu trả lời chính xác tôi đã chỉ là về để cung cấp cho. – Treborbob

+0

bạn nên sử dụng tham gia trái, nếu không bạn sẽ không nhận được mỗi hàng –

+0

@ t-clausen, vâng tôi đồng ý. –

30

chắc - một cái gì đó như thế này?

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

Cảm ơn, hoàn hảo! Tôi sẽ chấp nhận nó trong 9 phút. – Ryan

+1

Nếu bạn thực sự chỉ muốn ID (hoặc chỉ một vài cột, không tải), sau đó tôi sẽ mong đợi câu trả lời của Waqas Raja bằng cách sử dụng tham gia & nhóm bằng cách thực hiện tốt hơn thế này. – Treborbob

+0

Chúng ta có thể sắp xếp như thế nào trên cột '(SELECT COUNT (*) FROM dbo.Posts p WHERE p.ThreadID = t.ThreadID)'? –

Các vấn đề liên quan