tablas inner con mysql sql count sum left-join

inner - MySQL join y COUNT() tablas mĂșltiples



count join mysql (2)

Deberá utilizar DISTINCT , pero también debe contar los ID, no las claves externas:

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 violín .

Explicación: La palabra clave DISTINCT elimina todos los valores duplicados que resultan en una lista de valores únicos.

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

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 COUNT() y SUM() , obviamente obtiene:

name table1_id table2_id table3_id size test 4 2 2 1224

Sin embargo, usar 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 el COUNT() y SUM() , obtiene:

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 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 , obtiene:

name table1_id table2_id table3_id size test 3 1 2 1224

Estoy tratando de COUNT () tablas múltiples en una consulta, pero no puedo hacer que funcione. Esto es lo que tengo hasta ahora.

MESAS

table1 --------------------- id | name --------------------- 1 | test 2 | test2 table2 --------------------- id | table1_id --------------------- 1 | 1 2 | 1 3 | 1 table3 --------------------- id | table2_id --------------------- 1 | 1 table4 --------------------- id | size | table3_id --------------------- 1 | 1024 | 1 1 | 200 | 1

SQL:

SELECT table1.name, COUNT(table2.table1_id) AS table2_count, COUNT(table3.table2_id) AS table3_count, COUNT(table4.table3_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

Resultados que obtengo de la consulta anterior:

name | table2_count | table3_count | table4_count | table4_size --------------------------------------------------------------- test | 4 | 2 | 2 | 1224

Resultados que debería obtener:

name | table2_count | table3_count | table4_count | table4_size --------------------------------------------------------------- test | 3 | 1 | 2 | 1224

Cualquier ayuda sería apreciada


Puedes intentarlo de esta manera

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