Ver Mensaje Individual
  #3 (permalink)  
Antiguo 21/06/2013, 17:58
Avatar de wowmatu
wowmatu
 
Fecha de Ingreso: marzo-2013
Mensajes: 11
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: Resultados duplicados en MySQL

Cita:
Iniciado por leonardo_josue Ver Mensaje
Hola wowmatu:

Tengo problemas para ver las imágenes que posteaste, pero de entrada lo que observo es que tienes un grave, pero grave problema.

En tu sección WHERE NO ESTÁS COLOCANDO NINGUNA RELACIÓN ENTRE TUS TABLAS por lo tanto se está realizando un PRODUCTO CARTESIANO. Observa este ejemplo:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tablaA;
  2. +------+-------------+
  3. | id   | descripcion |
  4. +------+-------------+
  5. |    1 | uno         |
  6. |    2 | dos         |
  7. |    3 | tres        |
  8. +------+-------------+
  9. 3 rows IN SET (0.00 sec)
  10.  
  11. mysql> SELECT * FROM tablaB;
  12. +------+-------------+
  13. | id   | descripcion |
  14. +------+-------------+
  15. |    1 | one         |
  16. |    2 | two         |
  17. |    3 | three       |
  18. +------+-------------+
  19. 3 rows IN SET (0.00 sec)

Lo que tú estás haciendo es algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tablaA, tablaB
  2.     -> WHERE tablaA.id = 1;
  3. +------+-------------+------+-------------+
  4. | id   | descripcion | id   | descripcion |
  5. +------+-------------+------+-------------+
  6. |    1 | uno         |    1 | one         |
  7. |    1 | uno         |    2 | two         |
  8. |    1 | uno         |    3 | three       |
  9. +------+-------------+------+-------------+
  10. 3 rows IN SET (0.00 sec)


Es decir, en el WHERE pones una condición, de que el id = 1, pero NO ESPECIFICAS COMO ESTÁN RELACIONADAS LAS DOS TABLAS... deberías hacer algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tablaA
  2.     -> INNER JOIN tablaB ON TablaA.id = TablaB.id
  3.     -> WHERE tablaA.id = 1;
  4. +------+-------------+------+-------------+
  5. | id   | descripcion | id   | descripcion |
  6. +------+-------------+------+-------------+
  7. |    1 | uno         |    1 | one         |
  8. +------+-------------+------+-------------+
  9. 1 row IN SET (0.00 sec)

Observa que en la sección ON especifico la relación que existe entre los campos, es decir, todos los campos que son comunes en ambas tablas.

Como comentario adicional, no hagas las uniones en el FROM-WHERE, en lugar de hacer esto:

Código:
...
FROM tabla1, tabla2 WHERE tabla1.campo = tabla2.campo
...
Has esto

Código:
...
FROM tabla1 INNER JOIN tabla2 ON tabla1.campo = tabla2.campo
...
Si tienes dudas de cómo funciona el JOIN dale un vistazo a esta liga:

[url]http://es.wikipedia.org/wiki/Join[/url]

Saludos
Leo.
me repite la misma noticia dependiendo cuantos tags contiene esa noticia...