Principales respuestas
Consulta en 3 Tablas

Pregunta
-
Hola
tabla : csgf_student
Campos : matricula , apellido1 , apellido2 , nombre
tabla : csgf_student_enrollment
Campos : matricula , year_id , course_id
ejecuto esta consulta y fino
SELECT csgf_student_enrollment.matricula AS Matricula ,
CONCAT( csgf_student.apellido1,' ', csgf_student.apellido2,' , ', csgf_student.nombre) AS Nombre
FROM santagema.csgf_student_enrollment , csgf_student
WHERE csgf_student_enrollment.course_id = @par1 AND csgf_student_enrollment.year_id=@par2
AND csgf_student_enrollment.matricula = csgf_student .matricula ORDER BY csgf_student.apellido1 ASCpero ahora tengo la tabla csgf_web_app con los campos matricula , date , falta
Nesecito agregar el campo falta en la consulta anterior (obvio que el campo relacion con las otras 2 tablas es Matricula) con la condicion que date sea igual a la fecha actual.
EFRAIN MEJIAS C VALENCIA - VENEZUELA
Respuestas
-
Hola que tal asi como te comenta Alberto deberias de usar los joins, aqui te paso una imagen como deberias de implementarlos segun tu logica de negocio.
Cualquier cosa nos comentas.
Saludos,
Jorge Muchaypiña G.
Business Intelligence Analyst
- Marcado como respuesta José De Alva jueves, 30 de junio de 2016 15:49
-
Te recomiendo que uses la sintaxis moderna con JOIN ... ON en lugar de la antiquísima que une las tablas poniendo en el WHERE la condición de unión.
SELECT csgf_student_enrollment.matricula AS Matricula , CONCAT( csgf_student.apellido1,' ', csgf_student.apellido2,' , ', csgf_student.nombre) AS Nombre FROM santagema.csgf_student_enrollment join csgf_student on csgf_student_enrollment.matricula = csgf_student.matricula join csgf_web_app on csgf_web_app = sgf_student_enrollment.matricula WHERE csgf_student_enrollment.course_id = @par1 AND csgf_student_enrollment.year_id=@par2 AND DATE(csgf_web_app.[date]) = DATE(getdate()) ORDER BY csgf_student.apellido1 ASC
Las dos funciones DATE que te he puesto sirven para quitar las horas, minutos y segundos al comparar las fechas. Si el campo es de tipo DATE (y no DATETIME) se puede suprimir la primera, y eso aumentará el rendimiento en caso de que dicho campo esté indexado.
- Propuesto como respuesta Geovanny -Gio- Hernandez miércoles, 29 de junio de 2016 20:23
- Marcado como respuesta José De Alva jueves, 30 de junio de 2016 15:49
-
Sólo cambia el modo de combinación de INNER JOIN a LEFT JOIN:
SELECT se.matricula AS Matricula, CONCAT(s.apellido1,' ', s.apellido2,' , ', s.nombre) AS Nombre, ISNULL(w.falta, '') AS Falta FROM csgf_student s INNER JOIN santagema.csgf_student_enrollment se ON s.matricula = se.matricula LEFT JOIN csgf_web_app w ON s.matricula = w.matricula AND CONVERT(date, w.[date]) = CONVERT(date, GETDATE()) WHERE se.course_id = @par1 AND se.year_id = @par2 ORDER BY s.apellido1 ASC;
- Marcado como respuesta José De Alva jueves, 30 de junio de 2016 15:49
Todas las respuestas
-
Te recomiendo que uses la sintaxis moderna con JOIN ... ON en lugar de la antiquísima que une las tablas poniendo en el WHERE la condición de unión.
SELECT csgf_student_enrollment.matricula AS Matricula , CONCAT( csgf_student.apellido1,' ', csgf_student.apellido2,' , ', csgf_student.nombre) AS Nombre FROM santagema.csgf_student_enrollment join csgf_student on csgf_student_enrollment.matricula = csgf_student.matricula join csgf_web_app on csgf_web_app = sgf_student_enrollment.matricula WHERE csgf_student_enrollment.course_id = @par1 AND csgf_student_enrollment.year_id=@par2 AND DATE(csgf_web_app.[date]) = DATE(getdate()) ORDER BY csgf_student.apellido1 ASC
Las dos funciones DATE que te he puesto sirven para quitar las horas, minutos y segundos al comparar las fechas. Si el campo es de tipo DATE (y no DATETIME) se puede suprimir la primera, y eso aumentará el rendimiento en caso de que dicho campo esté indexado.
- Propuesto como respuesta Geovanny -Gio- Hernandez miércoles, 29 de junio de 2016 20:23
- Marcado como respuesta José De Alva jueves, 30 de junio de 2016 15:49
-
-
hola
me devuelve esto...por que del grupo solo el tiene falta.....
Deberia devolverme todas las matriculas y todos los nombres del grupo ( el que no tenga falta el campo en blanco )
EFRAIN MEJIAS C VALENCIA - VENEZUELA
- Editado Efrain Mejias Castillo miércoles, 29 de junio de 2016 21:30
-
Sólo cambia el modo de combinación de INNER JOIN a LEFT JOIN:
SELECT se.matricula AS Matricula, CONCAT(s.apellido1,' ', s.apellido2,' , ', s.nombre) AS Nombre, ISNULL(w.falta, '') AS Falta FROM csgf_student s INNER JOIN santagema.csgf_student_enrollment se ON s.matricula = se.matricula LEFT JOIN csgf_web_app w ON s.matricula = w.matricula AND CONVERT(date, w.[date]) = CONVERT(date, GETDATE()) WHERE se.course_id = @par1 AND se.year_id = @par2 ORDER BY s.apellido1 ASC;
- Marcado como respuesta José De Alva jueves, 30 de junio de 2016 15:49
-
- Editado Efrain Mejias Castillo jueves, 30 de junio de 2016 0:28
-
Hola que tal asi como te comenta Alberto deberias de usar los joins, aqui te paso una imagen como deberias de implementarlos segun tu logica de negocio.
Cualquier cosa nos comentas.
Saludos,
Jorge Muchaypiña G.
Business Intelligence Analyst
- Marcado como respuesta José De Alva jueves, 30 de junio de 2016 15:49