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

Problemas con joins: la consulta me trae valores erroneos

Estas en el tema de Problemas con joins: la consulta me trae valores erroneos en el foro de Mysql en Foros del Web. tengo las siguientes tablas consultas, pacientes, diagnosticos, recetas, medicamentos, enfermedades En las tabla consultas tiene los siguientes datos: Código: +--------+----------+------------+--------------+---------------------------+ | codigo | paciente | ...
  #1 (permalink)  
Antiguo 23/07/2012, 22:14
 
Fecha de Ingreso: octubre-2011
Mensajes: 58
Antigüedad: 13 años, 1 mes
Puntos: 0
Problemas con joins: la consulta me trae valores erroneos

tengo las siguientes tablas
consultas,
pacientes,
diagnosticos,
recetas,
medicamentos,
enfermedades

En las tabla consultas tiene los siguientes datos:
Código:
+--------+----------+------------+--------------+---------------------------+
| codigo | paciente | fecha      | motivo       | descripcion               |
+--------+----------+------------+--------------+---------------------------+
|      4 |       22 | 2012-07-23 | Es asmatico. | Se le receto salbultamol. |
+--------+----------+------------+--------------+---------------------------+
En pacientes:

Código:
+--------+--------+----------+----------+----------+------+---------------------------+--------------------+--------------+--------------+----------+-----------------+--------------+------+--------------+
| codigo | doctor | cedula   | nombre   | apellido | sexo | email                     | direccion          | telefono     | celular      | bbpin    | fechaNacimiento | nacionalidad | foto | lugarTrabajo |
+--------+--------+----------+----------+----------+------+---------------------------+--------------------+--------------+--------------+----------+-----------------+--------------+------+--------------+
|     22 |     25 | 12345678 | Gustavo  | Diaz     | M    | [email protected] | alma rosa          | 809-596-2351 | 849-450-2071 | no tiene | 1992-08-02      | rd           |      | asdasd       |
|     24 |     25 | 26382763 | Madeline | Guzman   | F    | [email protected]     | San isidro         | 8499634823   | 8093425734   | akh8sad  | 1990-11-12      | rd           |      | metro        |
|     27 |     27 | 9876543  | Adolfo   | Camilo   | M    | [email protected]        | jardines alma rosa | 8095962351   | 8495823723   | aksd83d  | 1992-02-08      | rd           | NULL | itla         |
|     63 |     25 | 1        | prueba   | Diaz     | M    | [email protected] | alma rosa          | 809-596-2351 | 849-450-2071 | no tiene | 1992-08-02      | rd           |      | itla         |
+--------+--------+----------+----------+----------+------+---------------------------+--------------------+--------------+--------------+----------+-----------------+--------------+------+--------------+
En diagnosticos:

Código:
+--------+----------+------------+----------+
| codigo | paciente | enfermedad | consulta |
+--------+----------+------------+----------+
|      2 |       24 |          5 |        4 |
+--------+----------+------------+----------+
En recetas

Código:
+--------+----------+-------------+----------+
| codigo | paciente | medicamento | consulta |
+--------+----------+-------------+----------+
|      1 |       22 |           4 |        4 |
+--------+----------+-------------+----------+
En medicamentos

Código:
+--------+-------------+------------------------------------------+
| codigo | nombre      | descripcion                              |
+--------+-------------+------------------------------------------+
|      3 | Aspirina    | Cura todo, dolor de cabeza, fiebre, etc. |
|      4 | Salbultamol | Para el asma.                            |
+--------+-------------+------------------------------------------+

El query es:

Código SQL:
Ver original
  1. SELECT consultas.codigo AS consulta, fecha, motivo, consultas.descripcion,
  2.        pacientes.codigo AS paciente, pacientes.cedula, pacientes.nombre, pacientes.apellido,
  3.        recetas.medicamento, medicamentos.nombre,
  4.        diagnosticos.enfermedad, enfermedades.nombre
  5. FROM consultas JOIN pacientes JOIN diagnosticos JOIN recetas JOIN medicamentos JOIN enfermedades
  6. ON consultas.paciente = pacientes.codigo
  7.    AND consultas.codigo = diagnosticos.consulta AND consultas.codigo = recetas.consulta
  8. WHERE consultas.codigo = 4 AND doctor = 25


Pero lo que me trae es:

Código:
+----------+------------+--------------+---------------------------+----------+----------+---------+----------+-------------+-------------+------------+--------+
| consulta | fecha      | motivo       | descripcion               | paciente | cedula   | nombre  | apellido | medicamento | nombre      | enfermedad | nombre |
+----------+------------+--------------+---------------------------+----------+----------+---------+----------+-------------+-------------+------------+--------+
|        4 | 2012-07-23 | Es asmatico. | Se le receto salbultamol. |       22 | 12345678 | Gustavo | Diaz     |           4 | Aspirina    |          5 | Asma   |
|        4 | 2012-07-23 | Es asmatico. | Se le receto salbultamol. |       22 | 12345678 | Gustavo | Diaz     |           4 | Salbultamol |          5 | Asma   |
+----------+------------+--------------+---------------------------+----------+----------+---------+----------+-------------+-------------+------------+--------+
Como ven las filas que me trae la consulta son casi identicos, a excepcion del campo "nombre" que le sigue a medicamento que (valga la redundancia) indica el nombre del medicamento. Según yo, solo debería traerme el medicamento Salbultamol que tiene el código 4, no la Aspira que tiene codigo 3 (ver tabla medicamentos), aunque en la primera fila del resultado Aspirina aparece con el código 4.

No entiendo porque esta pasando eso y que puedo hacer para solucionarlo.
__________________
La libertad más difícil de conservar es la de equivocarse. - Morris Wes

Lo que faltaba en internet: http://binar10s.blogspot.com/
  #2 (permalink)  
Antiguo 24/07/2012, 04:30
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Problemas con joins: la consulta me trae valores erroneos

Código MySQL:
Ver original
  1. SELECT c.codigo AS consulta,
  2.              c.fecha,
  3.              c.motivo,
  4.              c.descripcion,
  5.              p.codigo AS paciente,
  6.              p.cedula,
  7.              p.nombre,
  8.              p.apellido,
  9.              r.medicamento,
  10.              m.nombre,
  11.              d.enfermedad,
  12.              e.nombre
  13. FROM ((((consultas c INNER JOIN pacientes p
  14.                                    ON c.paciente = p.codigo)
  15.                                INNER JOIN diagnosticos d
  16.                                    ON c.codigo=d.consulta)
  17.                                INNER JOIN recetas r
  18.                                     ON c.codigo=r.consulta)
  19.                                INNER JOIN medicamentos m
  20.                                     ON r.medicamiento=m.codigo)
  21.                                INNER JOIN enfermedades e
  22.                                     ON e.codigo = d.enfermedad
  23. WHERE c.codigo = 4 AND p.doctor = 25

Faltaba alguna clausula ON.

Estas seguro que el dato doctor tiene que estar en la tabla pacientes...El doctor de cabecera quizas si pero y si un dia a un paciente le visita un doctor que no sea el suyo? Como lo reflejaras....

Otra duda todas las consultas generan una receta....

Código MySQL:
Ver original
  1. SELECT c.codigo AS consulta,
  2.              c.fecha,
  3.              c.motivo,
  4.              c.descripcion,
  5.              p.codigo AS paciente,
  6.              p.cedula,
  7.              p.nombre,
  8.              p.apellido,
  9.              r.medicamento,
  10.              m.nombre,
  11.              d.enfermedad,
  12.              e.nombre
  13. FROM (((consultas c INNER JOIN pacientes p
  14.                ON c.paciente = p.codigo)
  15.                     INNER JOIN diagnosticos d
  16.                           ON c.codigo=d.consulta)
  17.                               INNER JOIN enfermedades e
  18.                                   ON e.codigo = d.enfermedad)
  19.                                       LEFT JOIN (recetas r
  20.                                                  INNER JOIN medicamentos m
  21.                                                    ON r.medicamiento=m.codigo)
  22.                                          ON c.codigo=r.consulta
  23. WHERE c.codigo = 4 AND p.doctor = 25

Si una consulta no acaba en receta te la mostrará pero con los campos de la receta nulos.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 24/07/2012 a las 04:38

Etiquetas: erroneos, join, joins, select, tabla, campos
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 03:19.