2011-07-12 7 views
9

Tengo una tabla (Threads) que contiene un campo (id). Me gustaría seleccionar cada fila desde Threads, así como el número de filas en la tabla Posts donde el campo Posts.thread es el mismo que Threads.id.T-SQL ¿Seleccionar y contar desde diferentes tablas?

¿Cómo se puede hacer esto en SQL?

(Algo como esto pseudo-SQL: SELECT *, COUNT(* FROM Posts WHERE Posts.id=Threads.id) FROM Threads)

Respuesta

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

Pegado a la publicación, esta es la respuesta exacta que estaba a punto de dar. – Treborbob

+0

debe usar la combinación izquierda, de lo contrario no obtendrá cada fila –

+0

@ t-clausen, sí, estoy de acuerdo. –

30

Claro - algo como esto?

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

Gracias, perfecto! Lo aceptaré en 9 minutos. – Ryan

+1

Si realmente quieres solo la ID (o solo unas pocas columnas, no cargas), entonces esperaría la respuesta de Waqas Raja usando join & group by para realizar un trabajo mucho mejor que esto. – Treborbob

+0

¿Cómo podemos ordenar en '(SELECT COUNT (*) FROM dbo.Posts p WHERE p.ThreadID = t.ThreadID)' column? –

Cuestiones relacionadas