Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Datos se repiten en consulta de 2 tablas

Estas en el tema de Datos se repiten en consulta de 2 tablas en el foro de Mysql en Foros del Web. Cordial saludo, tengo el siguiente inconveniente con una consulta a 2 tablas la cual me da como resultado datos repetidos aquí el código: SELECT C.cedula, ...
  #1 (permalink)  
Antiguo 21/03/2018, 10:44
Avatar de heberthm  
Fecha de Ingreso: noviembre-2013
Ubicación: Cali
Mensajes: 65
Antigüedad: 11 años
Puntos: 1
Pregunta Datos se repiten en consulta de 2 tablas

Cordial saludo, tengo el siguiente inconveniente con una consulta a 2 tablas la cual me da como resultado datos repetidos aquí el código:

SELECT C.cedula, L.cedula, C.tratamiento, C.motivo_consulta, L.fecha, L.descripcion
FROM historia_clinica C
LEFT JOIN examenes_laboratorio L ON C.cedula = L.cedula
WHERE L.cedula = '$cedula'


Aquí las tablas:

Tabla história_clinica:



Tabla examenes_laboratorio:


Resultado de la consulta:




Qué debo cambiar para evitar que se muestren datos repetidos?.
De antemano gracias.
__________________
Hebeth Mazuera
  #2 (permalink)  
Antiguo 21/03/2018, 12:10
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Datos se repiten en consulta de 2 tablas

no son repetidos, si te fijas son datos para 2 fechas, aqui tendrias que definir cual de los 2 datos necesitas, el de fecha maxima o minima
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 21/03/2018, 12:10
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 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.
  #4 (permalink)  
Antiguo 21/03/2018, 13:34
Avatar de heberthm  
Fecha de Ingreso: noviembre-2013
Ubicación: Cali
Mensajes: 65
Antigüedad: 11 años
Puntos: 1
Respuesta: Datos se repiten en consulta de 2 tablas

Gracias leonardo josue, Estoy realizando un reporte con FPDF y lo que deseo hacer es mostrar los datos correspondientes a una cédula correspondiente en este caso 11.111.111 sin que se repitan.



Como se ve en la imagen del reporte se repiten los datos. ¿Qué debo hacer para evitar estos datos repetidos? Muchas gracias por la ayuda.
__________________
Hebeth Mazuera
  #5 (permalink)  
Antiguo 21/03/2018, 15:24
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Datos se repiten en consulta de 2 tablas

Hola de nuevo heberthm:

Aquí tienes de dos sopas:

Primero, puedes simplemente utilizar la cláusula DISTINCT en tu consulta, así

Código MySQL:
Ver original
  1. SELECT DISTINCT C.cedula, L.cedula, C.tratamiento, C.motivo_consulta, L.fecha, L.descripcion
  2. FROM historia_clinica C
  3. LEFT JOIN examenes_laboratorio L ON C.cedula = L.cedula
  4. WHERE L.cedula = '$cedula'

Pero como te mencioné en mi post y también lo comenta el compañero Libras en realidad no tienes información duplicada, sino que más bien tienes un problema con tu información.

Segundo, puede ser sea necesario agregar más condiciones a la cláusula ON del JOIN para que no se realice el producto cartesiano, posiblemente con la fecha, pero como no conocemos tu modelo, resulta complicado darte otra respuesta.

Es conveniente que trates de explicarnos mejor tu modelo y que nos digas qué es lo que estás guardando en cada una de tus tablas, qué campos son llaves primaras y foráneas y que nos digas tu lógica para relacionarlas. El hecho de que tengas una relación de muchos a muchos entre tus tablas me dice que hay algo mal en el modelo y es posible que la mejor opción sea agregar más tablas de relaciones.

Saludos
Leo.
  #6 (permalink)  
Antiguo 21/03/2018, 16:48
Avatar de heberthm  
Fecha de Ingreso: noviembre-2013
Ubicación: Cali
Mensajes: 65
Antigüedad: 11 años
Puntos: 1
Respuesta: Datos se repiten en consulta de 2 tablas

La estructura de las tablas son las siguientes:

Tabla examenes_labotatorio



Tabla historia_clinica



Lo que busco es mostrar en un reporte creado con FPDF las visitas anteriores de pacientes a un clinica veterinaria
__________________
Hebeth Mazuera

Etiquetas: sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:30.