Ver Mensaje Individual
  #2 (permalink)  
Antiguo 06/02/2013, 15:01
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Incoherencia MySQL

Hola NSD:

El problema creo que está en que en tu tabla T1, pues debes tener registros duplicados:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla1;
  2. +--------+
  3. | nombre |
  4. +--------+
  5. | uno    |
  6. | dos    |
  7. | tres   |
  8. +--------+
  9. 3 rows in set (0.00 sec)
  10.  
  11. mysql> SELECT * FROM tabla2;
  12. +------+--------+
  13. | ID   | Nombre |
  14. +------+--------+
  15. |    1 | uno    |
  16. |    2 | dos    |
  17. |    3 | uno    |
  18. |    4 | uno    |
  19. |    5 | tres   |
  20. +------+--------+
  21. 5 rows in set (0.00 sec)
  22.  
  23. mysql> SELECT * FROM tabla1 T1 INNER JOIN tabla2 T2 ON T1.Nombre=T2.Nombre;
  24. +--------+------+--------+
  25. | nombre | ID   | Nombre |
  26. +--------+------+--------+
  27. | uno    |    1 | uno    |
  28. | dos    |    2 | dos    |
  29. | uno    |    3 | uno    |
  30. | uno    |    4 | uno    |
  31. | tres   |    5 | tres   |
  32. +--------+------+--------+
  33. 5 rows in set (0.00 sec)

Aquí no hay problema, pero observa qué pasa si en tu tabla1 hay registros duplicados:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla1;
  2. +--------+
  3. | nombre |
  4. +--------+
  5. | uno    |
  6. | dos    |
  7. | tres   |
  8. | uno    |
  9. +--------+
  10. 4 rows in set (0.00 sec)
  11.  
  12. mysql> SELECT * FROM tabla1 T1 INNER JOIN tabla2 T2 ON T1.Nombre=T2.Nombre;
  13. +--------+------+--------+
  14. | nombre | ID   | Nombre |
  15. +--------+------+--------+
  16. | uno    |    1 | uno    |
  17. | uno    |    1 | uno    |
  18. | dos    |    2 | dos    |
  19. | uno    |    3 | uno    |
  20. | uno    |    3 | uno    |
  21. | uno    |    4 | uno    |
  22. | uno    |    4 | uno    |
  23. | tres   |    5 | tres   |
  24. +--------+------+--------+
  25. 8 rows in set (0.00 sec)

Observa que el resultado son 8 registros, esto es porque todos los registros para el campo uno aparecen duplicados.

Has algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT nombre, COUNT(nombre)
  2.     -> FROM tabla1
  3.     -> GROUP BY nombre
  4.     -> HAVING COUNT(nombre) > 1;
  5. +--------+---------------+
  6. | nombre | COUNT(nombre) |
  7. +--------+---------------+
  8. | uno    |             2 |
  9. +--------+---------------+
  10. 1 row in set (0.00 sec)

para verificar qué registros tienes duplicados.

saludos
Leo.