Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-06-2007
zvf zvf is offline
Miembro
 
Registrado: abr 2006
Posts: 158
Poder: 19
zvf Va por buen camino
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

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?
Responder Con Cita
  #2  
Antiguo 15-06-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
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
__________________
Piensa siempre en positivo !
Responder Con Cita
  #3  
Antiguo 15-06-2007
zvf zvf is offline
Miembro
 
Registrado: abr 2006
Posts: 158
Poder: 19
zvf Va por buen camino
Muchas gracias por tu respuesta!!

Pero... que crees?

No funciona, me devuelve muchisimas mas filas, y repetidas.
Responder Con Cita
  #4  
Antiguo 15-06-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
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.
__________________
Piensa siempre en positivo !
Responder Con Cita
  #5  
Antiguo 15-06-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
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.
__________________
Piensa siempre en positivo !
Responder Con Cita
  #6  
Antiguo 15-06-2007
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 24
ContraVeneno Va por buen camino
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)
__________________

Responder Con Cita
  #7  
Antiguo 15-06-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
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
__________________
Piensa siempre en positivo !
Responder Con Cita
  #8  
Antiguo 15-06-2007
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 24
ContraVeneno Va por buen camino
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'
__________________

Responder Con Cita
  #9  
Antiguo 15-06-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
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.
__________________
Piensa siempre en positivo !
Responder Con Cita
  #10  
Antiguo 15-06-2007
zvf zvf is offline
Miembro
 
Registrado: abr 2006
Posts: 158
Poder: 19
zvf Va por buen camino
Ahhhh, ya ya ya...
De verdad no tiene sentido la consulta, perdon
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!!
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Consulta Anidada farrop SQL 1 04-07-2006 19:28:06
Consulta anidada Malon SQL 5 07-05-2004 17:58:45
Consulta anidada fjcg02 SQL 6 05-02-2004 08:47:58
consulta anidada pzala SQL 2 14-12-2003 22:43:16
consulta sql anidada davidgaldo SQL 2 13-11-2003 14:42:00


La franja horaria es GMT +2. Ahora son las 13:55:38.


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