none
¿Como hacer una consulta comparando columnas de dos tablas en un procedimiento? RRS feed

  • Pregunta

  • Verán tengo dos procedimientos para buscar los datos de alumnos, para los menores de edad debo buscar a los encargados, mientras que los mayores no los poseen.

    ///Ver mayores de edad

    CREATE PROCEDURE veralumnomayor
    @carnet numeric(13)
    AS
    select Estudiante.Carnet,Estudiante.Nombre,Estudiante.Apellido,Estudiante.Fechanac as "Fecha de Nacimiento",
    telefono.telefono,Correo.correo from Estudiante
    inner join telefono on telefono.DPI =Estudiante.Carnet
    inner join correo on Correo.DPI = Estudiante.Carnet
    inner join Encargado on Encargado.carnet_menor <> Estudiante.Carnet
    where Estudiante.estatus = 1 AND Estudiante.Carnet = @carnet;

    //Ver menores de edad

    CREATE PROCEDURE veralumnomayor

    @carnet numeric(13)
    AS
    select Estudiante.Carnet,Estudiante.Nombre,Estudiante.Apellido,Estudiante.Fechanac as "Fecha de Nacimiento",
    Encargado.DPI,Encargado.Nombre,telefono.telefono,Correo.correo from Estudiante
    inner join Encargado on Encargado.carnet_menor = Estudiante.Carnet
    inner join telefono on telefono.DPI =Estudiante.Carnet
    inner join correo on Correo.DPI = Estudiante.Carnet
    where Estudiante.estatus = 1 AND Estudiante.Carnet = @carnet;

    Lo que yo quiero saber es si hay alguna forma de buscar en la tabla encargados si existe un tutor para el carnet que me ingresen, y si existe entonces mostrar al encargado y si no, mostrar solo los datos del alumno.


    domingo, 17 de junio de 2018 22:43

Respuestas

  • Hola Sam_19:

    Existen muchas maneras de realizar eso.

    CREATE PROCEDURE sp_VerAlumnos
    @carnet numeric(13)
    AS
    select Estudiante.Carnet,Estudiante.Nombre,Estudiante.Apellido,Estudiante.Fechanac as "Fecha de Nacimiento",
    telefono.telefono,Correo.correo, Encargado.*
    
        from Estudiante
    inner join telefono on telefono.DPI =Estudiante.Carnet
    inner join correo on Correo.DPI = Estudiante.Carnet
    left outer join Encargado on Encargado.carnet_menor = Estudiante.Carnet
    where Estudiante.estatus = 1 
    AND Estudiante.Carnet = @carnet;
    
    /*Te dará todos los datos del encargado caso de tenerlo, sino irán nules */

    Esa sin ver tus datos, parece una opción factible.

    Otras opciones, simples, en un mismo procedimiento haces un

    CREATE PROCEDURE veralumnomayor
    @carnet numeric(13)
    AS
    IF (CONDICION) BEGIN
    select Estudiante.Carnet,Estudiante.Nombre,Estudiante.Apellido,Estud
    
    ....
    END
    ELSE 
    BEGIN
    select 
    Estudiante......
    
    END
    /* Recuerda que puedes utilizar muchas herramientas dentro de un procedure */
    Un saludo

    • Marcado como respuesta Sam_19 domingo, 17 de junio de 2018 23:23
    domingo, 17 de junio de 2018 22:53

Todas las respuestas

  • Hola Sam_19:

    Existen muchas maneras de realizar eso.

    CREATE PROCEDURE sp_VerAlumnos
    @carnet numeric(13)
    AS
    select Estudiante.Carnet,Estudiante.Nombre,Estudiante.Apellido,Estudiante.Fechanac as "Fecha de Nacimiento",
    telefono.telefono,Correo.correo, Encargado.*
    
        from Estudiante
    inner join telefono on telefono.DPI =Estudiante.Carnet
    inner join correo on Correo.DPI = Estudiante.Carnet
    left outer join Encargado on Encargado.carnet_menor = Estudiante.Carnet
    where Estudiante.estatus = 1 
    AND Estudiante.Carnet = @carnet;
    
    /*Te dará todos los datos del encargado caso de tenerlo, sino irán nules */

    Esa sin ver tus datos, parece una opción factible.

    Otras opciones, simples, en un mismo procedimiento haces un

    CREATE PROCEDURE veralumnomayor
    @carnet numeric(13)
    AS
    IF (CONDICION) BEGIN
    select Estudiante.Carnet,Estudiante.Nombre,Estudiante.Apellido,Estud
    
    ....
    END
    ELSE 
    BEGIN
    select 
    Estudiante......
    
    END
    /* Recuerda que puedes utilizar muchas herramientas dentro de un procedure */
    Un saludo

    • Marcado como respuesta Sam_19 domingo, 17 de junio de 2018 23:23
    domingo, 17 de junio de 2018 22:53
  • Hola Sam_19:

    Existen muchas maneras de realizar eso.

    CREATE PROCEDURE sp_VerAlumnos
    @carnet numeric(13)
    AS
    select Estudiante.Carnet,Estudiante.Nombre,Estudiante.Apellido,Estudiante.Fechanac as "Fecha de Nacimiento",
    telefono.telefono,Correo.correo, Encargado.*
    
        from Estudiante
    inner join telefono on telefono.DPI =Estudiante.Carnet
    inner join correo on Correo.DPI = Estudiante.Carnet
    left outer join Encargado on Encargado.carnet_menor = Estudiante.Carnet
    where Estudiante.estatus = 1 
    AND Estudiante.Carnet = @carnet;
    
    /*Te dará todos los datos del encargado caso de tenerlo, sino irán nules */

    Esa sin ver tus datos, parece una opción factible.

    Otras opciones, simples, en un mismo procedimiento haces un

    CREATE PROCEDURE veralumnomayor
    @carnet numeric(13)
    AS
    IF (CONDICION) BEGIN
    select Estudiante.Carnet,Estudiante.Nombre,Estudiante.Apellido,Estud
    
    ....
    END
    ELSE 
    BEGIN
    select 
    Estudiante......
    
    END
    /* Recuerda que puedes utilizar muchas herramientas dentro de un procedure */
    Un saludo

    Gracias! Me ha servido bastante.
    domingo, 17 de junio de 2018 23:23