2010-09-21 36 views
28

¿Cómo hago para seleccionar COUNT (*) s de varias tablas en MySQL?COUNT (*) de varias tablas en MySQL

Tales como:

SELECT COUNT(*) AS table1Count FROM table1 WHERE someCondition 
JOIN?? 
SELECT COUNT(*) AS table2Count FROM table2 WHERE someCondition 
CROSS JOIN? subqueries? 
SELECT COUNT(*) AS table3Count FROM table3 WHERE someCondition 

Editar:

El objetivo es devolver esto:

+-------------+-------------+-------------+ 
| table1Count | table2Count | table3Count | 
+-------------+-------------+-------------+ 
| 14   | 27   | 0   | 
+-------------+-------------+-------------+ 
+0

¿Cuál es tu ¿Gol? – Scott

+0

¿Necesitas más detalles? ¿Puedes describir con palabras lo que intentas hacer? – egrunin

+0

intente cambiar la unión interna a la combinación izquierda –

Respuesta

65

Puede hacerlo mediante el uso de subconsultas, una subconsulta para cada CuentaTabla:

SELECT 
    (SELECT COUNT(*) FROM table1 WHERE someCondition) as table1Count, 
    (SELECT COUNT(*) FROM table2 WHERE someCondition) as table2Count, 
    (SELECT COUNT(*) FROM table3 WHERE someCondition) as table3Count 
+0

Quiero contar 3 (recuento) filas de la primera fila y una cuenta de recuento de la segunda. Como puedo hacer eso ? – Adrian

+1

Vine aquí tratando de descubrir cómo hacer lo mismo en una base de datos firebird. La sintaxis es ligeramente diferente: SELECT * FROM (SELECT COUNT (*) AS table1Count de la Tabla1), (SELECT COUNT (*) como table2Count DE Tabla2), (SELECT COUNT (*) AS table3Count DE cuadro3) –

2

Usted puede usar UNIÓN

SELECT COUNT(*) FROM table1 WHERE someCondition 
    UNION 
    SELECT COUNT(*) FROM table2 WHERE someCondition 
    UNION 
    SELECT COUNT(*) FROM table3 WHERE someCondition 
+3

Union dará los resultados en filas individuales en lugar de columnas. El conjunto de resultados que OP está buscando es una sola fila con 3 columnas de recuento –

10

Usted puede hacer esto con subconsultas, por ejemplo:

select (SELECT COUNT(*) FROM table1 WHERE someCondition) as table1Count, 
     (SELECT COUNT(*) FROM table2 WHERE someCondition) as table2Count 
3

Intente cambiar a:

SELECT 
    COUNT(table1.*) as t1, 
    COUNT(table2.*) as t2, 
    COUNT(table3.*) as t3 
FROM table1 
    LEFT JOIN tabel2 ON condition 
    LEFT JOIN tabel3 ON condition 
+0

no lo hará trabajar sin relaciones entre las tablas –

Cuestiones relacionadas