none
Validaciones de campos NULL con Inner Join RRS feed

  • Pregunta

  • Hola a todos, aun sigo en proceso de aprendizaje sobre SQL Server y no se del todo claro como se podrían validar campos NULL de las diferentes tablas a las que se hace en Inner Join con mi tabla Principal (P_Pruebas)

    Esta es la consulta que he estado utilizando para traer los datos 

    If @Bandera = 's6'
       Begin
      SET @Activo=1

     SELECT    P_Pruebas.IdPrueba, uvwSistemas.Nombre_Sistema,uvwEmpleados.Nombre,
       P_Pruebas.FechaPrueba,S_PruebasModalidades.PruebaModalidad,
       P_PruebasModulos.PruebaModulo,
       C_PruebasTipos.PruebaTipo, C_PruebasTipos.PruebaAbreviacion,
    C_PruebasEvaluaciones.PruebaEvaluacion,
    P_PruebasModulos.PruebaObservacion,
    S_PruebasStatus.PruebaStatus, P_PruebasModulos.IdPruebaEvaluacion, 
    P_Pruebas.IdUsuarioRegistra,
    S_PruebasCierres.PruebaCierre

    FROM    P_Pruebas LEFT OUTER JOIN
    P_PruebasModulos ON P_Pruebas.IdPrueba = P_PruebasModulos.IdPrueba LEFT OUTER JOIN
    C_PruebasTipos ON P_PruebasModulos.IdPruebaTipo = C_PruebasTipos.IdPruebaTipo LEFT OUTER JOIN
    C_PruebasEvaluaciones ON P_PruebasModulos.IdPruebaEvaluacion = C_PruebasEvaluaciones.IdPruebaEvaluacion LEFT OUTER JOIN
                S_PruebasModalidades ON P_Pruebas.IdPruebaModalidad = S_PruebasModalidades.IdPruebaModalidad LEFT OUTER JOIN
                S_PruebasStatus ON P_Pruebas.IdPruebaStatus = S_PruebasStatus.IdPruebaStatus LEFT OUTER JOIN 
                S_PruebasCierres ON P_Pruebas.IdPruebaCierreTipo = S_PruebasCierres.IdPruebaCierreTipo LEFT OUTER JOIN
                uvwEmpleados ON P_Pruebas.IdUsuarioRegistra = uvwEmpleados.IdUsuario LEFT OUTER JOIN
    uvwSistemas ON P_Pruebas.IdSistema = uvwSistemas.Id_Sistema

    Where  P_Pruebas.Activo = 1  AND P_Pruebas.IdPrueba =  @IdPrueba 
    Order by FechaPrueba ASC
       End

    Como Podría validar todos los datos que se requieran y al momento de consultar no queden Null en ciertas columnas

    He estado probando la función ISNULL donde se declara ISNULL(varible, 'Mensaje de sustitición' o numero entero) pero se requiere llenar IdPruebaEvaluacion con otra tabla al igual que PruebaAbreviacion y PruebaEvaluacion

    De antemano muchas gracias y espero que me puedan ayudar por favor 


    lunes, 30 de noviembre de 2020 19:38

Respuestas

  • Hola Jonathan Jesús Victoriano García:

    Puedes contar los registros que son null

    Select count(*) as numero
    	   From p_pruebas
    			Left Outer Join p_pruebasmodulos On p_pruebas.idprueba = p_pruebasmodulos.idprueba
    			Left Outer Join c_pruebastipos On p_pruebasmodulos.idpruebatipo = c_pruebastipos.idpruebatipo
    			Left Outer Join c_pruebasevaluaciones On p_pruebasmodulos.idpruebaevaluacion = c_pruebasevaluaciones.idpruebaevaluacion
    			Left Outer Join s_pruebasmodalidades On p_pruebas.idpruebamodalidad = s_pruebasmodalidades.idpruebamodalidad
    			Left Outer Join s_pruebasstatus On p_pruebas.idpruebastatus = s_pruebasstatus.idpruebastatus
    			Left Outer Join s_pruebascierres On p_pruebas.idpruebacierretipo = s_pruebascierres.idpruebacierretipo
    			Left Outer Join uvwempleados On p_pruebas.idusuarioregistra = uvwempleados.idusuario
    			Left Outer Join uvwsistemas On p_pruebas.idsistema = uvwsistemas.id_sistema
    	   Where p_pruebas.activo = 1 
    		And p_pruebas.idprueba = @Idprueba
    		And c_pruebasevaluaciones.idpruebaevaluacion is null 
    

    En la última fila está la solución. And c_pruebasevaluaciones.idpruebaevaluacion is null. O lo que es lo mismo. Si la consulta te devuelve registros para las columnas que pongas en el where donde la comparación con columna is null sea true entonces, tienes que enviar el mensaje de campos requeridos. 


    miércoles, 2 de diciembre de 2020 6:07

Todas las respuestas

  • Hola Jonathan Jesús Victorio García:

    Es un poco confusa tú pregunta.

    La función isNull, lo que hace, es en caso de que el valor a comparar con null sea null te devuelve el valor sustituido. 

    Por ejemplo en el caso de tú query podría ser.

    Select p_pruebas.idprueba
    	 , isnull(uvwsistemas.nombre_sistema, '') as nombre_sistema
    	 , isnull(uvwempleados.nombre,'') as nombre
    	 , isnull(p_pruebas.fechaprueba,'19000101') as fechaprueba
    	 , isnull(s_pruebasmodalidades.pruebamodalidad,'') as pruebamodalidad
    	 , isnull(p_pruebasmodulos.pruebamodulo,'') as pruebamodulo
    	 , isnull(c_pruebastipos.pruebatipo,'') as pruebatipo
    	 , isnull(c_pruebastipos.pruebaabreviacion,'') as pruebaabreviacion
    	 , isnull(c_pruebasevaluaciones.pruebaevaluacion,'') as pruebaevaluacion
    	 , isnull(p_pruebasmodulos.pruebaobservacion,'') as pruebaobservacion
    	 , isnull(s_pruebasstatus.pruebastatus,'') as pruebastatus
    	 , isnull(p_pruebasmodulos.idpruebaevaluacion,-1) as idpruebaevaluacion
    	 , isnull(p_pruebas.idusuarioregistra,-1) as idusuarioregistra
    	 , isnull(s_pruebascierres.pruebacierre,'') as pruebacierre
    	   From p_pruebas
    			Left Outer Join p_pruebasmodulos On p_pruebas.idprueba = p_pruebasmodulos.idprueba
    			Left Outer Join c_pruebastipos On p_pruebasmodulos.idpruebatipo = c_pruebastipos.idpruebatipo
    			Left Outer Join c_pruebasevaluaciones On p_pruebasmodulos.idpruebaevaluacion = c_pruebasevaluaciones.idpruebaevaluacion
    			Left Outer Join s_pruebasmodalidades On p_pruebas.idpruebamodalidad = s_pruebasmodalidades.idpruebamodalidad
    			Left Outer Join s_pruebasstatus On p_pruebas.idpruebastatus = s_pruebasstatus.idpruebastatus
    			Left Outer Join s_pruebascierres On p_pruebas.idpruebacierretipo = s_pruebascierres.idpruebacierretipo
    			Left Outer Join uvwempleados On p_pruebas.idusuarioregistra = uvwempleados.idusuario
    			Left Outer Join uvwsistemas On p_pruebas.idsistema = uvwsistemas.id_sistema
    	   Where p_pruebas.activo = 1 
    		 And p_pruebas.idprueba = @Idprueba
    	   Order By fechaprueba Asc;

    Por tanto si la query sin isnull te traeo mil filas, ahora te devolverá mil filas, pero ninguna columna visualizará null, todas tendrán un valor.

    Pero cuando lo que quieres es, que las filas estén restringidas por que contengan o no contenga un null, entonces se aplica tal que.

    Select p_pruebas.idprueba
    	 , uvwsistemas.nombre_sistema
    	 , uvwempleados.nombre
    	 , p_pruebas.fechaprueba
    	 , s_pruebasmodalidades.pruebamodalidad
    	 , p_pruebasmodulos.pruebamodulo
    	 , c_pruebastipos.pruebatipo
    	 , c_pruebastipos.pruebaabreviacion
    	 , c_pruebasevaluaciones.pruebaevaluacion
    	 , p_pruebasmodulos.pruebaobservacion
    	 , s_pruebasstatus.pruebastatus
    	 , p_pruebasmodulos.idpruebaevaluacion
    	 , p_pruebas.idusuarioregistra
    	 , s_pruebascierres.pruebacierre
    	   From p_pruebas
    			Left Outer Join p_pruebasmodulos On p_pruebas.idprueba = p_pruebasmodulos.idprueba
    			Left Outer Join c_pruebastipos On p_pruebasmodulos.idpruebatipo = c_pruebastipos.idpruebatipo
    			Left Outer Join c_pruebasevaluaciones On p_pruebasmodulos.idpruebaevaluacion = c_pruebasevaluaciones.idpruebaevaluacion
    			Left Outer Join s_pruebasmodalidades On p_pruebas.idpruebamodalidad = s_pruebasmodalidades.idpruebamodalidad
    			Left Outer Join s_pruebasstatus On p_pruebas.idpruebastatus = s_pruebasstatus.idpruebastatus
    			Left Outer Join s_pruebascierres On p_pruebas.idpruebacierretipo = s_pruebascierres.idpruebacierretipo
    			Left Outer Join uvwempleados On p_pruebas.idusuarioregistra = uvwempleados.idusuario
    			Left Outer Join uvwsistemas On p_pruebas.idsistema = uvwsistemas.id_sistema
    	   Where p_pruebas.activo = 1 
    		And p_pruebas.idprueba = @Idprueba
    		And c_pruebasevaluaciones.idpruebaevaluacion is not null
    	   Order By fechaprueba Asc;

    Usando como "elemento comparador" columna is null o columna is not null, se limitan el número de filas a traer, puesto que solo mostrará en el caso las que tengan algún tipo de valor para idpruebaevaluación.

    martes, 1 de diciembre de 2020 4:40
  • Hola gracias por responder, lo que pretendo explicar es. ¿Cómo se podría validar los campos NULL? para al momento de realizar la consulta, si se detecta un valor NULL mandar un mensaje de que el campo es requerido o ser llenado

    Por ejemplo si están NULL uno o mas campos, como imprimiría un mensaje de dando a conocer los campos NULL que son requeridos  para posteriormente si cumple dicha condición, cargar todos los datos

    De antemano muchas gracias.

    martes, 1 de diciembre de 2020 21:20
  • Hola Jonathan Jesús Victoriano García:

    Puedes contar los registros que son null

    Select count(*) as numero
    	   From p_pruebas
    			Left Outer Join p_pruebasmodulos On p_pruebas.idprueba = p_pruebasmodulos.idprueba
    			Left Outer Join c_pruebastipos On p_pruebasmodulos.idpruebatipo = c_pruebastipos.idpruebatipo
    			Left Outer Join c_pruebasevaluaciones On p_pruebasmodulos.idpruebaevaluacion = c_pruebasevaluaciones.idpruebaevaluacion
    			Left Outer Join s_pruebasmodalidades On p_pruebas.idpruebamodalidad = s_pruebasmodalidades.idpruebamodalidad
    			Left Outer Join s_pruebasstatus On p_pruebas.idpruebastatus = s_pruebasstatus.idpruebastatus
    			Left Outer Join s_pruebascierres On p_pruebas.idpruebacierretipo = s_pruebascierres.idpruebacierretipo
    			Left Outer Join uvwempleados On p_pruebas.idusuarioregistra = uvwempleados.idusuario
    			Left Outer Join uvwsistemas On p_pruebas.idsistema = uvwsistemas.id_sistema
    	   Where p_pruebas.activo = 1 
    		And p_pruebas.idprueba = @Idprueba
    		And c_pruebasevaluaciones.idpruebaevaluacion is null 
    

    En la última fila está la solución. And c_pruebasevaluaciones.idpruebaevaluacion is null. O lo que es lo mismo. Si la consulta te devuelve registros para las columnas que pongas en el where donde la comparación con columna is null sea true entonces, tienes que enviar el mensaje de campos requeridos. 


    miércoles, 2 de diciembre de 2020 6:07