Hola sanymatu:
Este es un error bastante típico, me extraña que no hayas encontrado ninguna solución... pero bueno, vayamos por partes... para entender por qué te está ocurriendo esto, hay que recordar cómo funcionan los JOINS... supongamos que tienes estas tablas:
Código MySQL:
Ver original+-------+--------+
| id_t1 | nombre |
+-------+--------+
| 1 | UNO |
| 2 | DOS |
| 3 | TRES |
+-------+--------+
+-------+-------+----------+
| id_t2 | id_t1 | planilla |
+-------+-------+----------+
| 1 | 1 | 15 |
| 2 | 1 | 10 |
| 3 | 1 | 12 |
| 4 | 2 | 7 |
| 5 | 2 | 3 |
| 6 | 3 | 9 |
| 7 | 3 | 21 |
+-------+-------+----------+
+-------+-------+-------+
| id_t3 | id_t1 | vales |
+-------+-------+-------+
| 1 | 1 | 2 |
| 2 | 1 | 3 |
| 3 | 2 | 5 |
| 4 | 3 | 10 |
+-------+-------+-------+
Observa lo que pasa si haces un JOIN entre las tablas 2 y 3:
Código MySQL:
Ver original+-------+-------+----------+-------+-------+-------+
| id_t2 | id_t1 | planilla | id_t3 | id_t1 | vales |
+-------+-------+----------+-------+-------+-------+
| 1 | 1 | 15 | 1 | 1 | 2 |
| 1 | 1 | 15 | 2 | 1 | 3 |
| 2 | 1 | 10 | 1 | 1 | 2 |
| 2 | 1 | 10 | 2 | 1 | 3 |
| 3 | 1 | 12 | 1 | 1 | 2 |
| 3 | 1 | 12 | 2 | 1 | 3 |
| 4 | 2 | 7 | 3 | 2 | 5 |
| 5 | 2 | 3 | 3 | 2 | 5 |
| 6 | 3 | 9 | 4 | 3 | 10 |
| 7 | 3 | 21 | 4 | 3 | 10 |
+-------+-------+----------+-------+-------+-------+
10 rows
in set (0.00 sec
)
Aquí está la duplicidad. La relación entre la tabla1 y las tablas 2 y 3 es de 1 a n, pero entre las tablas 2 y 3 se convierte en una relación muchos a muchos.
Para evita esto, tienes que agrupar antes de hacer el JOIN... así:
Código MySQL:
Ver originalmysql
> SELECT T1.
*, T2.total_planilla
, T3.total_vales
-> tabla1 T1
-> ( SELECT id_t1
, SUM(planilla
) total_planilla
+-------+--------+----------------+-------------+
| id_t1 | nombre | total_planilla | total_vales |
+-------+--------+----------------+-------------+
| 1 | UNO | 37 | 5 |
| 2 | DOS | 10 | 5 |
| 3 | TRES | 30 | 10 |
+-------+--------+----------------+-------------+
Observa que la agrupación se realiza en una subconsulta:
Código:
( SELECT id_t1, SUM(planilla) total_planilla
FROM tabla2
GROUP BY id_t1) T2
De esta manera, la relación entre las tabla1 y la tabla2 pasa a ser una relación 1 a 1, lo mismo que la relación entre las tablas1 y tabla3. Dale un vistazo y si tienes dudas lo comentas en el foro.
Saludos
Leo.