Ver Mensaje Individual
  #4 (permalink)  
Antiguo 25/06/2012, 21:20
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Select de 3 tablas y un campo tenga dos valores

LEFT JOIN devuelve todo lo que está en la tabla de la izquierda, tenga o no relación con la tabla derecha.
En el contexto de tu consulta, cuenta los pacientes que tengan alguna relación con una consulta, donde haya algún síntoma detectado en esa consulta. Pero eso no significa que tenga ambos síntomas, sino que al menos tiene uno.
Para que se de que tenga ambos síntomas debe cumplirse que:
1) Sea un paciente que haya tenido una consulta.
2) Que en una única consulta consulta se hayan encontrado si o sí ambos síntomas.

En esencia, el paciente tiene que ser tal que se cumpla que su consulta esté inncluida en:
Código MySQL:
Ver original
  1. SELECT idconsulta
  2. FROM sintoma S
  3. WHERE s.sintoma IN('obesidad', 'mellitus')
  4. GROUP BY idconsulta
  5. HAVING COUNT(*) = 2;

Por tanto, la consulta sería:
Código MySQL:
Ver original
  1. SELECT COUNT(DISTINCT P.Curp) totalPacientes
  2. FROM paciente p INNER JOIN consulta C ON P.Curp = C.Curp
  3. WHERE C.idconsulta IN (SELECT idconsulta
  4.            FROM sintoma S
  5.            WHERE s.sintoma IN('obesidad', 'mellitus')
  6.            GROUP BY idconsulta
  7.            HAVING COUNT(*) = 2);

Sintetizando: Si la primera consulta que te pongo no devuelve datos, es que no hay ninguna consulta donde se hayan encontrado ambos síntomas, o es posible que estén mal cargados los datos.

Tips:
1) Usa alias para las tablas. Simplifica la escritura y la hace más legible.
2) No pongas paréntesis porque sí. En MySQL pueden generar un orden de lectura ineficiente.
3) No uses funciones agregadas sin poner alias. Después se te complicará cuando pases a programar en un lenguaje y trates de tomar los datos.
4) No uses los mismos nombres para los campos que para las tablas, pueden producir errores en las consultas que son casi indetectables (estás usando síntoma para ambas cosas, los resultados pueden ser incorrectos.).
5) Estudia bien el uso de LEFT / INNER / RIGHT JOIN. No se ponen porque sí. Cada uno tiene un tipo de consulta donde es eficiente.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)