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 23-09-2004
Avatar de Pablo Carlos
Pablo Carlos Pablo Carlos is offline
Miembro
 
Registrado: jun 2004
Ubicación: Mendoza - Argentina
Posts: 270
Poder: 20
Pablo Carlos Va por buen camino
Problemas con extracción de datos

Hola gente... uso paradox y delphi 5... tengo la siguiente consulta->
Código Delphi [-]
Select DatosPersonales_id,

DAT_Apellido + ', ' + DAT_Nombres,

ASI_id_Profesor,

ASI_HoraEntrada,

ASI_HoraSalida,

ASI_FechaEntrada,

ASI_FechaSalida,

MPR_Anio,

MPR_Hora,

MAT_Materia,

MPR_Dia,

MPR_Division

From DatosPersonales.db,

Asistencia.db,

Profesores.db,

MateriaProfesor.db,

Materias.db

Where PRO_id_DatosPersonales = DatosPersonales_id

and ASI_id_Profesor = Profesores_id //aqui deberia modificar???

and MPR_id_Profesor = Profesores_id

and MPR_id_Materia = Materias_Id

and ASI_FechaEntrada = Fecha

and MPR_Dia = Dia /// Jueves por ejemplo

and PRO_Condicion = 'A'

and MPR_Turno = Turno

order by 8, 12

con esta consulta recupero todos los que reunen las condiciones puestas...
Lo que no puedo hacer es recuperar los profesores que no figuran en la tabla asistencia dentro de la fecha pasada por parametro.. (habrá prof que no estén en la tabla asistencia por que no asistieron pero si debian venir...
sugerencias....¡bienvenidas!
Gracias
__________________
Por qué todas las personas saben exactamente cómo debemos vivir nuestra vida, y nunca tienen idea de cómo deben vivir sus propias vidas.
Responder Con Cita
  #2  
Antiguo 24-09-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Debes usar un OUTER JOIN, por ejemplo:

Código SQL [-]
select campos
from Asistencias
left join Profesores
  on Profesores.Id = Asistencias.Id_Profesor

// Saludos
Responder Con Cita
  #3  
Antiguo 26-09-2004
Avatar de Pablo Carlos
Pablo Carlos Pablo Carlos is offline
Miembro
 
Registrado: jun 2004
Ubicación: Mendoza - Argentina
Posts: 270
Poder: 20
Pablo Carlos Va por buen camino
Gracias Roman...

En la prueba me trae sólo el mismo prof que firmo pero más veces (repetido)...
Aclaro tablas paradox ... delphi 5 ... sql explorer ...
Saludos
__________________
Por qué todas las personas saben exactamente cómo debemos vivir nuestra vida, y nunca tienen idea de cómo deben vivir sus propias vidas.

Última edición por Pablo Carlos fecha: 27-09-2004 a las 01:37:22.
Responder Con Cita
  #4  
Antiguo 27-09-2004
Avatar de Pablo Carlos
Pablo Carlos Pablo Carlos is offline
Miembro
 
Registrado: jun 2004
Ubicación: Mendoza - Argentina
Posts: 270
Poder: 20
Pablo Carlos Va por buen camino
Cita:
Empezado por Pablo Carlos
En la prueba me trae sólo el mismo prof que firmo pero más veces (repetido)...
Aclaro tablas paradox ... delphi 5 ... sql explorer ...
Saludos
Saludos
__________________
Por qué todas las personas saben exactamente cómo debemos vivir nuestra vida, y nunca tienen idea de cómo deben vivir sus propias vidas.
Responder Con Cita
  #5  
Antiguo 29-09-2004
Avatar de Pablo Carlos
Pablo Carlos Pablo Carlos is offline
Miembro
 
Registrado: jun 2004
Ubicación: Mendoza - Argentina
Posts: 270
Poder: 20
Pablo Carlos Va por buen camino
Pueden revisar este codigo (sql)?

Hola.. Este código me trae lo que necesito pero exactamente 70 veces repetido.. ¿pueden revisarlo?
Código:
Select DatosPersonales_id, DAT_Apellido + ', ' + DAT_Nombres,ASI_id_Profesor,ASI_HoraEntrada,ASI_FechaEntrada,
MPR_Dia, MPR_Division
From  DatosPersonales.db,Asistencia.db,MateriaProfesor.db,	  Materias.db,Profesores.db
left JOIN Profesores on
Profesores_id = ASI_id_Profesor
where  PRO_id_DatosPersonales = DatosPersonales_id
	and   ASI_id_Profesor = Profesores_id
	and   MPR_id_Profesor = Profesores_id
	and   MPR_id_Materia = Materias_Id
	and  ASI_FechaEntrada = '09/09/2004' 
	and  MPR_Dia = 'Jueves'
	and PRO_Condicion0 = 'A'
	and  MPR_Turno = 'T'
__________________
Por qué todas las personas saben exactamente cómo debemos vivir nuestra vida, y nunca tienen idea de cómo deben vivir sus propias vidas.
Responder Con Cita
  #6  
Antiguo 29-09-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Quizá ayude que quites profesores.db de la cláusula FROM ya que ya la incluyes en el JOIN.

// Saludos
Responder Con Cita
  #7  
Antiguo 29-09-2004
Avatar de Pablo Carlos
Pablo Carlos Pablo Carlos is offline
Miembro
 
Registrado: jun 2004
Ubicación: Mendoza - Argentina
Posts: 270
Poder: 20
Pablo Carlos Va por buen camino
Gracias por responder... pero si quito a Profesores.db sólo trae aquel que si esta en Asistencia (solo el que firmo) y necesito el que firmo (asistió) y el que no firmo pero sí debia venir ese día.Saludos
__________________
Por qué todas las personas saben exactamente cómo debemos vivir nuestra vida, y nunca tienen idea de cómo deben vivir sus propias vidas.
Responder Con Cita
  #8  
Antiguo 29-09-2004
[basti] basti is offline
Miembro Premium
 
Registrado: ago 2004
Posts: 388
Poder: 20
basti Va por buen camino
Creo que el problema está en poner todas las tablas en el FROM. Al hacer esto se van a repetir los resultados tantas veces como (por ejemplo) materias existan. Si pasas las tablas al LEFT JOIN no se debería de repetir.

Algo así:

Código SQL [-]
 Select DatosPersonales_id, DAT_Apellido + ', ' + DAT_Nombres,ASI_id_Profesor,ASI_HoraEntrada,ASI_FechaEntrada,
 MPR_Dia, MPR_Division
 From  Asistencia.db,Profesores.db
 left outer JOIN DatosPersonales.db on
   pro_id_DatosPersonales = DatosPersonales_id
 left outer join MateriaProfesor.db on
   MPR_id_Profesor = Profesores_id
 left outer join Materias.db on
   MPR_id_Materia = Materias_Id
 where   ASI_id_Profesor = Profesores_id
     and  ASI_FechaEntrada = '09/09/2004' 
     and  MPR_Dia = 'Jueves'
     and PRO_Condicion0 = 'A'
     and  MPR_Turno = 'T'

Un saludo
Responder Con Cita
  #9  
Antiguo 29-09-2004
Avatar de Pablo Carlos
Pablo Carlos Pablo Carlos is offline
Miembro
 
Registrado: jun 2004
Ubicación: Mendoza - Argentina
Posts: 270
Poder: 20
Pablo Carlos Va por buen camino
Gracias por responder...pero quitando las tablas del From estoy como mi primer duda... solo trae el prof que sí asistió y no todos lo que hayan venido más lo que tendrían que venir y que no lo hicieron...

Saludos
__________________
Por qué todas las personas saben exactamente cómo debemos vivir nuestra vida, y nunca tienen idea de cómo deben vivir sus propias vidas.
Responder Con Cita
  #10  
Antiguo 29-09-2004
[basti] basti is offline
Miembro Premium
 
Registrado: ago 2004
Posts: 388
Poder: 20
basti Va por buen camino
Si no entiendo mal, la tabla MateriaProfesor es la que tiene todas las clases a las que deberían asistir los profesores. Entonces la tabla MateriaProfesor debería ser la única de la clausula FROM. Además si pones el filtro ASI_FechaEntrada = '09/09/2004', no te mostrará los que no se encuentran en la tabla Asistencia, creo que debería funcionar de la siguiente manera:

Código SQL [-]
 Select DatosPersonales_id, DAT_Apellido + ', ' + DAT_Nombres,ASI_id_Profesor,ASI_HoraEntrada,ASI_FechaEntrada,
 MPR_Dia, MPR_Division
 From  MateriaProfesor.db
 left outer join Profesores.db on
   MPR_id_Profesor = Profesores_id
 left outer join Asistencia.db on
   ASI_id_Profesor = Profesores_id
 left outer JOIN DatosPersonales.db on
   pro_id_DatosPersonales = DatosPersonales_id
 left outer join Materias.db on
   MPR_id_Materia = Materias_Id
 where  (ASI_FechaEntrada = '09/09/2004'  or 
              MPR_id_Profesor not in (select ASI_id_Profesor from Asistencia.db 
                                            where ASI_FechaEntrada = '09/09/2004'))

     and  MPR_Dia = 'Jueves'
     and PRO_Condicion0 = 'A'
     and  MPR_Turno = 'T'

un saludo
Responder Con Cita
  #11  
Antiguo 29-09-2004
Avatar de Pablo Carlos
Pablo Carlos Pablo Carlos is offline
Miembro
 
Registrado: jun 2004
Ubicación: Mendoza - Argentina
Posts: 270
Poder: 20
Pablo Carlos Va por buen camino
Cita:
Empezado por basti
creo que debería funcionar de la siguiente manera:
Basti podría decirte que te haz equivocado en ese "creo" deberías decir así va a funcionar ¡extrae lo que necesito!!!
Gracias a todos por esta ayuda
Saludos
__________________
Por qué todas las personas saben exactamente cómo debemos vivir nuestra vida, y nunca tienen idea de cómo deben vivir sus propias vidas.
Responder Con Cita
  #12  
Antiguo 29-09-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Sí, muy bien basti. La verdad es que yo por flojera me concentré sólo en una tabla y me olvidé del resto.

// Saludos
Responder Con Cita
  #13  
Antiguo 29-09-2004
Avatar de Pablo Carlos
Pablo Carlos Pablo Carlos is offline
Miembro
 
Registrado: jun 2004
Ubicación: Mendoza - Argentina
Posts: 270
Poder: 20
Pablo Carlos Va por buen camino
Cita:
Empezado por roman
Debes usar un OUTER JOIN, por ejemplo:

Código SQL [-]
select campos
from Asistencias
left join Profesores
on Profesores.Id = Asistencias.Id_Profesor

// Saludos
De todos modos distes el puntapie inicial... ademas que toda la solución estaba, como dijistes, en left join...
Gracias roman
__________________
Por qué todas las personas saben exactamente cómo debemos vivir nuestra vida, y nunca tienen idea de cómo deben vivir sus propias vidas.
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


La franja horaria es GMT +2. Ahora son las 18:42:59.


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