none
Problema en Consulta RRS feed

  • Pregunta

  • Hola

    Estoy tratando de seleccionar registros de las tablas  invrequisicion , invsolicitud que no esten en la tabla pop10100con la consulta que describo en la parte final del post..... pero me esta seleccionando registros que si estan en la pop10100 ....

    SELECT B.numerosolicitud AS Solicitud,B.aprobadoPor As SolctdAprobadoPor,CONVERT(CHAR(10),B.fechaaprobacion,105) as FechaAprobacionSolctd ,A.numero AS Requisicion ,A.aprobadopor AS RQAprobadoPor, CONVERT(CHAR(10),A.fechaaprobacion,105) AS FechaAprobacionRQ , A.nombresolicitante AS NombreSolicitante , A.nombresupervisor AS NombreSupervisor ,A.base AS Base , A.departamento AS Departamento ,A.nrotrabajo AS Trabajo,A.tiposolicitud AS TipoSolicitud FROM invrequisicion A ,invsolicitud B WHERE A.numerosolicitud=B.numerosolicitud AND CONVERT (smalldatetime ,CONVERT(char(10),A.fechaaprobacion,103),103) >=@fecha1 AND CONVERT(smalldatetime,CONVERT (char(10),A.fechaaprobacion,103),103) <=@fecha2  AND A.anuladosino='NO' AND A.aprobadosino='SI' AND B.numeronotasalida IS  NULL  AND NOT EXISTS (SELECT * FROM POP10100 WHERE POP10100.CONFIRM1='RQ-'+ A.numero AND POP10100.CONFIRM1 = 'RQ-' + B.numerorequisicion) ORDER BY A.numerosolicitud DESC

               

    EFRAIN MEJIAS C VALENCIA - VENEZUELA

    viernes, 16 de agosto de 2013 1:44

Respuestas

  • Seria de mucha ayuda que nos dijeras con palabras lo que tratas de resolver. Es dificil adivinar lo que estas haciendo solo leyendo el query.

    La condicion de filtro que usas dentro del query correlacionado asociado a la condicion del operador EXISTS, indica que no exista una fila en la tabla [POP10100] cuyo valor de la columna [CONFIRM1] sea igual a los valores de [A].[numero] y [B].[numerorequisicion]. Si estos dos ultimos valores suelen ser iguales, entonces el operador logico AND tendria sentido aunque seria suficiente con usar una sola de ellas. Por el contrario, si estas columnas no suelen contener el mismo valor para las filas que machan la condicion de union que usas en la clausula WHERE, entonces seria mas apropiado el uso del operador logico OR pero no se si esto cambiaria el problema que tratas de resolver.

    ...
    AND NOT EXISTS (
    	SELECT
    		*
    	FROM
    		POP10100
    	WHERE
    		POP10100.CONFIRM1 = 'RQ-' + A.numero
    		OR POP10100.CONFIRM1 = 'RQ-' + B.numerorequisicion 
    	)
    ...


    AMB

    Some guidelines for posting questions...

    viernes, 16 de agosto de 2013 12:45

Todas las respuestas

  • Dentro del NOT EXISTS estás metiendo una consulta sobre POP10100 en la que pides que el campo COMFIRM1 sea igual a dos valores distintos. Lógicamente, eso nunca se va a cumplir (podrá ser igual a uno o al otro pero no a ambos a la vez), luego el Select nunca devolverá nada, y por tanto el Not exists siempre será True.

    viernes, 16 de agosto de 2013 7:29
  • hola

    Alberto Poblacion

    NOT EXISTS (SELECT * FROM POP10100 WHERE POP10100.CONFIRM1='RQ-'+ A.numero AND POP10100.CONFIRM1 = 'RQ-' + B.numerorequisicion)

    A.numero  y  B.numerorequisicion   son campos que contienen el mismo valor pero con diferente nombre


    EFRAIN MEJIAS C VALENCIA - VENEZUELA

    viernes, 16 de agosto de 2013 12:28
  • Seria de mucha ayuda que nos dijeras con palabras lo que tratas de resolver. Es dificil adivinar lo que estas haciendo solo leyendo el query.

    La condicion de filtro que usas dentro del query correlacionado asociado a la condicion del operador EXISTS, indica que no exista una fila en la tabla [POP10100] cuyo valor de la columna [CONFIRM1] sea igual a los valores de [A].[numero] y [B].[numerorequisicion]. Si estos dos ultimos valores suelen ser iguales, entonces el operador logico AND tendria sentido aunque seria suficiente con usar una sola de ellas. Por el contrario, si estas columnas no suelen contener el mismo valor para las filas que machan la condicion de union que usas en la clausula WHERE, entonces seria mas apropiado el uso del operador logico OR pero no se si esto cambiaria el problema que tratas de resolver.

    ...
    AND NOT EXISTS (
    	SELECT
    		*
    	FROM
    		POP10100
    	WHERE
    		POP10100.CONFIRM1 = 'RQ-' + A.numero
    		OR POP10100.CONFIRM1 = 'RQ-' + B.numerorequisicion 
    	)
    ...


    AMB

    Some guidelines for posting questions...

    viernes, 16 de agosto de 2013 12:45
  • Hola

    Lo que nesecito es seleccionar los campos de las tablas invrequisicion y de invsolicitud que no esten en [POP10100] cuyo valor de la columna [CONFIRM1] es igual a los valores de [A].[numero] y [B].[numerorequisicion] ,  Yo solo usaba  POP10100.CONFIRM1='RQ-'+ A.numero pero como me devolvia datos que no deseaba agregue POP10100.CONFIRM1 = 'RQ-' + B.numerorequisicion)....pero aun asi me devuelve datos no deseados en especifico que estan en la pop10100 .....se que este tipo de select se puede hacer con INNER JOIN O LEFT JOIN pero la verdad no conozco muy bien estas herramienta por eso pido su ayuda



    EFRAIN MEJIAS C VALENCIA - VENEZUELA

    viernes, 16 de agosto de 2013 16:02
  • Hola.

    Ten en cuenta que no vemos los datos ni nos dices con claridad qué registros de más salen y no deberían salir. La sentencia puede armarse como un left join, que sería equivalente a la sentencia "not exists" ya propuesta. Modifica la sentencia del "not exists" para descartar los registros sobrantes o dinos qué registros salen y no deberían salir.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.com
    Sígueme en twitter en http://twitter.com/qwalgrande

    domingo, 25 de agosto de 2013 9:11
    Moderador
  • Hola.

    ¿Lo resolviste?


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.com
    Sígueme en twitter en http://twitter.com/qwalgrande

    viernes, 30 de agosto de 2013 8:56
    Moderador