Ver Mensaje Individual
  #3 (permalink)  
Antiguo 21/03/2018, 12:10
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 2 meses
Puntos: 447
Respuesta: Datos se repiten en consulta de 2 tablas

Hola Heberthm:

Tal como tienes tus datos, en realidad no hay información duplicada, sino simplemente que tienes una relación de muchos a muchos:

Para los datos de ejemplo, la cédula 11.111.111 tiene DOS REGISTROS en la tabla historia_clinica, y en tu tabla examen laboratorio TAMBIÉN EXISTEN DOS REGISTROS:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM historia_clinica;
  2. +---------------------+------------+---------------------------------+
  3. | id_hostoria_clinica | cedula     | medico                          |
  4. +---------------------+------------+---------------------------------+
  5. | 0000001             | 11.111.111 | Diana Milena Soto Castanon      |
  6. | 0000002             | 22.222.222 | Diana Milena Soto Castanon      |
  7. | 0000003             | 11.111.111 | Altemar García Restrepo Cortes  |
  8. +---------------------+------------+---------------------------------+
  9. 3 rows in set (0.00 sec)
  10.  
  11. mysql> SELECT * FROM examenes_laboratorio;
  12. +----------------+------------+-----------------------------------------------------+
  13. | id_laboratorio | cedula     | descripcion                                         |
  14. +----------------+------------+-----------------------------------------------------+
  15. |              1 | 11.111.111 | Parcial de orina, hemografia, glicemia, KOH, prueba |
  16. |              2 | 11.111.111 | Parcial de orina, hemografia, KOH                   |
  17. |              3 | 22.222.222 | otro registro                                       |
  18. +----------------+------------+-----------------------------------------------------+
  19. 3 rows in set (0.00 sec)

Al hacer un JOIN entre ambas tablas, se hace un PRODUCTO CARTESIANO:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM historia_clinica
  2.     -> INNER JOIN examenes_laboratorio
  3.     ->   on historia_clinica.cedula = examenes_laboratorio.cedula;
  4. +---------------------+------------+---------------------------------+----------------+------------+-----------------------------------------------------+
  5. | id_hostoria_clinica | cedula     | medico                          | id_laboratorio | cedula     | descripcion                                         |
  6. +---------------------+------------+---------------------------------+----------------+------------+-----------------------------------------------------+
  7. | 0000001             | 11.111.111 | Diana Milena Soto Castanon      |    1 | 11.111.111 | Parcial de orina, hemografia, glicemia, KOH, prueba           |
  8. | 0000003             | 11.111.111 | Altemar García Restrepo Cortes  |    1 | 11.111.111 | Parcial de orina, hemografia, glicemia, KOH, prueba           |
  9. | 0000001             | 11.111.111 | Diana Milena Soto Castanon      |    2 | 11.111.111 | Parcial de orina, hemografia, KOH                             |
  10. | 0000003             | 11.111.111 | Altemar García Restrepo Cortes  |    2 | 11.111.111 | Parcial de orina, hemografia, KOH                             |
  11. | 0000002             | 22.222.222 | Diana Milena Soto Castanon      |    3 | 22.222.222 | otro registro                                                 |
  12. +---------------------+------------+---------------------------------+----------------+------------+-----------------------------------------------------+
  13. 5 rows in set (0.00 sec)

es decir, cada registro de tu tabla1 con cédula 11.111.111 se une con cada registro de tu tabla2... esto no quiere decir que haya información duplicada, observa que cada registro TIENE AL MENOS UN DATO DISTINTO.

Ahora bien, dinos qué es lo que estás esperando obtener como resultado y te podremos indicar alguna alternativa para hacer tu consulta.

Por lo pronto, investiga un poco acerca de la función GROUP_CONCAT, creo que te puede servir

Saludos
Leo.