sql >> Base de Datos >  >> RDS >> Mysql

MySQL se une y COUNT () en varias tablas

Deberá usar DISTINCT , pero también necesita contar los ID, no las claves foráneas:

SELECT
    table1.name,
    COUNT(DISTINCT table2.id) AS table2_count,
    COUNT(DISTINCT table3.id) AS table3_count,
    COUNT(DISTINCT table4.id) AS table4_count,
    SUM(table4.size) AS table4_size
FROM table1
LEFT JOIN table2 ON table1.id = table2.table1_id
LEFT JOIN table3 ON table2.id = table3.table2_id
LEFT JOIN table4 ON table3.id = table4.table3_id
WHERE table1.id = 1

Aquí hay un fiddle .

Explicación: El DISTINCT palabra clave elimina todos los valores duplicados dando como resultado una lista de valores únicos.

Si ejecuta su consulta sin COUNT() y SUM() , obtienes:

name  table1_id  table2_id  table3_id  size
test  1          1          1          1024 
test  1          1          1          200 
test  1          (null)     (null)     (null) 
test  1          (null)     (null)     (null) 

Entonces, si agrega el COUNT() y SUM() , obviamente obtienes:

name  table1_id  table2_id  table3_id  size
test  4          2          2          1224 

Sin embargo, usando DISTINCT con su consulta no ayudará porque puede ver claramente los valores duplicados, lo que dará como resultado:

name  table1_id  table2_id  table3_id  size
test  1          1          1          1224 

Ahora, si ejecuta mi consulta sin COUNT() y SUM() , obtienes:

name  table1_id  table2_id  table3_id  size
test  1          1          1          1024 
test  1          1          2          200 
test  2          (null)     (null)     (null) 
test  3          (null)     (null)     (null) 

Si agrega el COUNT() y SUM() , obtendrá exactamente los mismos resultados que su consulta:

name  table1_id  table2_id  table3_id  size
test  4          2          2          1224 

Sin embargo, debido a que esta vez tiene valores diferentes (es decir, no todos son 1), ahora si cuenta los valores únicos usando DISTINCT , obtienes:

name  table1_id  table2_id  table3_id  size
test  3          1          2          1224