Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Consulta anidada y multitabla (https://www.clubdelphi.com/foros/showthread.php?t=44827)

zvf 15-06-2007 16:59:15

Consulta anidada y multitabla
 
Hola a todos!!
Tengo lo siguiente, espero me puedan apoyar, porque voy a enviar este reporte y me salen otros valores en la consulta:confused:

Código SQL [-]
select paciente_campo1, paciente_campo2 from paciente
where 
  paciente_id in (
  select distinct cita_pacienteid 
  from cita 
  where cita_servicioid = 423 and cita_status = 'T')

Esta consulta me regresa el numero de registros que necesito, y me muestra el campo 1 y campo 2 de la tabla paciente, pero yo quiero que tambien, de esos registros que encontro, me regrese algunos campos de la tabla cita, que se encuentra en la consulta anidada, pero no lo puedo hacer, intente lo siguiente:

Código SQL [-]
select paciente_campo1, paciente_campo2, cita_campo1 
from paciente left join cita on paciente_id = cita_pacienteid
where 
  paciente_id in (
  select distinct cita_pacienteid 
  from cita 
  where cita_servicioid = 423 and cita_status = 'T')

Pero esta consulta me esta regresando todas las filas de los pacientes con sus citas, de tal forma que se repite muchas veces un mismo id de paciente, es que paciente con cita tiene relacion 1 a N, y yo solo quiero que me regrese las mismas filas de mi primer consulta, pero agregando al select un campo de la tabla cita, ¿Como lo puedo hacer? :(

gluglu 15-06-2007 17:07:22

Código SQL [-]
Select paciente_campo1, paciente_campo2,
cita.campo1, cita.campo2
from paciente
left join cita
  on paciente.paciente_id = cita.cita_pacienteid
where paciente_id in
 (select distinct cita_pacienteid 
  from cita 
  where cita_servicioid = 423 and cita_status = 'T')

ClNaU2 ;)

zvf 15-06-2007 17:12:45

Muchas gracias por tu respuesta!!

Pero... :( que crees?

No funciona, me devuelve muchisimas mas filas, y repetidas.

gluglu 15-06-2007 18:09:37

Perdón. Me acabo de dar cuenta que la consulta que yo puse es idéntica a la que tu pusiste arriba. Error mío.

Analizando tu cuestión en detalle, creo que no tiene solución.

No puedes obtener un campo concreto de citas ya que el resultado de dicho campo podría no ser único. Por eso creo que la consulta que planteas 'lógicamente' no tiene solución.

Al hacer un 'Distinct' del ID de tu tabla Citas, estás obteniendo un valor único, en este caso sí. Pero dicho ID, se corresponde de hecho con muchos registros diferentes de tu tabla citas, por lo que no se puede devolver un valor único para un campo concreto de citas que no sea el propio 'Distinct ID'.

Espero haberme explicado correctamente y estar acertado en mi argumentación. :o

gluglu 15-06-2007 18:11:51

Añado : Si tu crees que es lógicamente posible, expón un set de datos de ejemplo real que tengas, y podemos analizar la consulta sobre ese ejemplo.

ContraVeneno 15-06-2007 18:41:07

Que raro... la propuesta de gluglu a mi me funciona correctamente
Código SQL [-]
Select T1.Campo, T2.Campo
from Tabla1 T1
join Tabla2 T2 on T1.Campo=T2.Campo
where T1.Campo in (select distinct Campo from Tabla2)

gluglu 15-06-2007 18:50:27

Yo mismo reconozco que no funciona :

Prueba con el siguiente Set de Datos :

Código:

PACIENTES
 
ID  CAMPO1  CAMPO2
======================
1  A      D
2  B      E
3  C      F
 
CITAS
 
ID  CAMPO3
==========
1  A
1  B
1  C
1  D
2  E
2  E
2  G
2  E
3  I
3  E
3  E
3  L

Con la siguiente consulta :
Código SQL [-]
Select Paciente.ID, Paciente.campo1, Paciente.campo2, Citas.campo3
from Paciente
Left Join Citas
  On Paciente.ID = Citas.ID
where Paciente.id in
 (select Distinct ID from Citas
  where Citas.campo3 = 'E')

me devuelve este resultado
Código:

ID  CAMPO1  CAMPO2  CAMPO3
=============================
2    B        E        E
2    B        E        E
2    B        E        G
2    B        E        E
3    C        F        I
3    C        F        E
3    C        F        E


ContraVeneno 15-06-2007 18:56:53

Pues a mi si me funciona... :(:(:(

¿pero y si sacamos la condición del paciente, fuera de la consulta anidada?
Código SQL [-]
Select T1.Campo, T2.Campo from Tabla1 T1 
join Tabla2 T2 on T1.Campo=T2.Campo 
where T1.Campo in (select distinct Campo from Tabla2)
And T1.Campo = 'T'

gluglu 15-06-2007 19:07:48

Pues si, funciona.

Ok.

Ahora sólo faltaría agrupar el resultado si se desea.

Pero indendientemente de que funcione o no. Sigo con la misma pregunta: qué columna quieres obtener de la tabla 'citas' si la condición que impones puede devolver valores varios en las otras columnas de 'citas' que no estén incluidas dentro de la condición ?

Por eso sigo pensando que la consulta propuesta no tiene sentido.

zvf 15-06-2007 23:07:13

Ahhhh, ya ya ya...
De verdad no tiene sentido la consulta, perdon :p
Estaba queriendo obtener la fecha de la cita pero no se puedo, dado que son varias para un solo paciente.

Muchisimas gracias por su respuesta, me han ayudado a entender, que mi problema, no era problema, jajajaja

Gracias por su atencion y por su tiempo!!


La franja horaria es GMT +2. Ahora son las 01:49:43.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi