2011-07-12 8 views
9

Mam tabelę (Threads) zawierającą pole (id). Chciałbym wybrać każdy wiersz z Threads, a także liczbę wierszy w tabeli Posts, gdzie pole Posts.thread jest takie samo jak Threads.id.T-SQL Wybierz i policz od innej tabeli?

Jak to zrobić w SQL?

(coś jak ten pseudo-SQL: SELECT *, COUNT(* FROM Posts WHERE Posts.id=Threads.id) FROM Threads)

Odpowiedz

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

Przeniósł się na pocztę, to jest dokładna odpowiedź, którą właśnie miałem dać. – Treborbob

+0

powinieneś użyć lewostronnego połączenia, w przeciwnym razie nie dostaniesz żadnego wiersza –

+0

@ t-clausen, tak, zgadzam się. –

30

Jasne - coś takiego?

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

Dzięki, idealne! Przyjmę to za 9 minut. – Ryan

+1

Jeśli naprawdę chcesz tylko ID (lub tylko kilka kolumn, nie ładuje się), wtedy oczekiwałbym, że odpowiedź Waqasa Raja, używając join & group by, będzie znacznie lepsza. – Treborbob

+0

Jak możemy sortować na '(SELECT COUNT (*) FROM dbo.Posts p WHERE p.ThreadID = t.ThreadID)' column? –

Powiązane problemy