Hola Silver:
El problema que tienes es bastante común, y se debe al hecho de que tienes dos combinaciones 1 a n, pero al unirlas se convierten en una relación n a m, trataré de explicarme con un ejemplo:
Supongamos que tienes estos datos:
Código MySQL:
Ver original+------+-------------+
| id | descripcion |
+------+-------------+
| 1 | uno |
| 2 | dos |
| 3 | tres |
+------+-------------+
+------+-------------+
| id | descripcion |
+------+-------------+
| 1 | uno |
| 2 | dos |
| 4 | cuatro |
+------+-------------+
+------+-------------+
| id | descripcion |
+------+-------------+
| 1 | uno |
| 1 | uno |
| 1 | uno |
| 2 | dos |
+------+-------------+
Supongamos que quieres saber cuantas veces aparecen los registros de la tabla1 en las tablas dos y tres, haciéndolo por separado, no hay ningún problema:
Código MySQL:
Ver originalmysql
> SELECT t1.id
, t1.descripcion
, COUNT(t2.id
) total_t2
+------+-------------+----------+
| id | descripcion | total_t2 |
+------+-------------+----------+
| 1 | uno | 1 |
| 2 | dos | 1 |
| 3 | tres | 0 |
+------+-------------+----------+
mysql
> SELECT t1.id
, t1.descripcion
, COUNT(t3.id
) total_t3
+------+-------------+----------+
| id | descripcion | total_t3 |
+------+-------------+----------+
| 1 | uno | 3 |
| 2 | dos | 1 |
| 3 | tres | 0 |
+------+-------------+----------+
Sin embargo, ¿Qué pasa cuando unes los dos COUNT's?
Código MySQL:
Ver originalmysql
> SELECT t1.id
, t1.descripcion
, COUNT(t2.id
) total_t2
, COUNT(t3.id
) total_t3
+------+-------------+----------+----------+
| id | descripcion | total_t2 | total_t3 |
+------+-------------+----------+----------+
| 1 | uno | 3 | 3 |
| 2 | dos | 1 | 1 |
| 3 | tres | 0 | 0 |
+------+-------------+----------+----------+
Aquí las cuentas ya no cuadran. Para entender bien el problema observa qué pasa cuando no agrupas, es decir, colocas simplemente los LEFT JOIN's:
Código:
mysql> SELECT *
-> FROM tabla1 T1
-> LEFT JOIN tabla2 T2 ON T1.id = T2.id
-> LEFT JOIN tabla3 T3 ON T1.id = T3.id;
+------+-------------+------+-------------+------+-------------+
| id | descripcion | id | descripcion | id | descripcion |
+------+-------------+------+-------------+------+-------------+
| 1 | uno | 1 | uno | 1 | uno |
| 1 | uno | 1 | uno | 1 | uno |
| 1 | uno | 1 | uno | 1 | uno |
| 2 | dos | 2 | dos | 2 | dos |
| 3 | tres | NULL | NULL | NULL | NULL |
+------+-------------+------+-------------+------+-------------+
5 rows in set (0.00 sec)
La relación entres tus tablas 1 y dos es 1 a n, igual que la relación entre las tablas 1 y 3, sin embargo, al ponerlas juntas, entonces creas una relación entre 2 y 3 n a m... ¿qué tienes que hacer?, agrupar primeramente las tablas 2 y tres de tal manera que sólo tengas 1 registro por cada id, entonces la relación pasa a ser una relación 1 a 1 entre las tablas... es decir, algo como esto:
Código MySQL:
Ver originalmysql
> SELECT t1.id
, t1.descripcion
, total_t2
, total_t3
+------+-------------+----------+----------+
| id | descripcion | total_t2 | total_t3 |
+------+-------------+----------+----------+
| 1 | uno | 1 | 3 |
| 2 | dos | 1 | 1 |
+------+-------------+----------+----------+
Dale un vistazo y nos comentas.
Saludos
Leo.