IN Y NOT IN

06/06/2007 - 10:23 por Oscar | Informe spam
Hola

Tengo la siguiente sql:

SELECT COUNT(*) AS Expr1
FROM ...
WHERE ((CONTRATOS_INSTALACIONES.CONINS_CODCLIENTE +
CONTRATOS_INSTALACIONES.CONINS_CODINSTALA +
CONTRATOS_INSTALACIONES.CONINS_TIPOINSTALA)
NOT IN
(SELECT PTTRAINS_CLIENTE +
PTTRAINS_INSTALACION + PTTRAINS_INSTALACION_TIPO
FROM PT_TRABAJADORES_JORNADA WITH
(NOLOCK)))

El problema que tengo es que cuando pongo IN de los 4000 registros que hay
me coge 360,eso es correcto, pero cuando pongo NOT IN en vez de cogerme
4000-360 no me coge ninguno, me da 0, porque puede ser?

Saludos, Oscar

Preguntas similare

Leer las respuestas

#1 Miguel Egea
06/06/2007 - 11:09 | Informe spam
Esa sintaxis no parece muy adecuada

prueba así
Select Count(*)
FROM Contratos_instalaciones c
left join PT_TRABAJADORES_JORNADA p
on c.ConINS_CODcliente=p.PTTRAINS_CLIENTE and
c.CONINS_CODINSTALA=PTTRAINS_INSTALACION_TIPO and
c.CONINS_TIPOINSTALA=p. PTTRAINS_INSTALACION_TIPO
where p.PTTRAINS_CLIENTE is null

y nos cuentas

Saludos Cordiales
Miguel Egea Gómez
http://blogs.solidq.com/ES/megea/default.aspx
http://www.portalsql.com
Solid Quality Mentors


"Oscar" wrote in message
news:
Hola

Tengo la siguiente sql:

SELECT COUNT(*) AS Expr1
FROM ...
WHERE ((CONTRATOS_INSTALACIONES.CONINS_CODCLIENTE
+ CONTRATOS_INSTALACIONES.CONINS_CODINSTALA +
CONTRATOS_INSTALACIONES.CONINS_TIPOINSTALA)
NOT IN
(SELECT PTTRAINS_CLIENTE +
PTTRAINS_INSTALACION + PTTRAINS_INSTALACION_TIPO
FROM PT_TRABAJADORES_JORNADA WITH
(NOLOCK)))

El problema que tengo es que cuando pongo IN de los 4000 registros que hay
me coge 360,eso es correcto, pero cuando pongo NOT IN en vez de cogerme
4000-360 no me coge ninguno, me da 0, porque puede ser?

Saludos, Oscar


Respuesta Responder a este mensaje
#2 Jesús López
06/06/2007 - 11:23 | Informe spam
Pues yo creo que será porque en los 4000 - 360 registros que deberían salir,
alguno de los campos
CONINS_CODCLIENTE, CONINS_CODINSTALA o CONINS_CODINSTALA es nulo. Como la
concatenación de nulos con cualquier cadena es nulo y como

NULL NOT IN (SELECT lo quesea)

No se cumple. Pues no salen. ¡Cosas de los nulos!

De todas formas te recomendaría que no usaras concatenación con IN y NOT IN.
Cuando hay más de un campo, en vez de concatenarlos y usar IN y NOT IN,
deberías usar EXISTS y NOT EXISTS, otra alternativa es usar DISTINCT + LEFT
JOIN e IS NULL en la where.

Saludos:


Jesús López
www.solidq.com



"Oscar" escribió en el mensaje
news:
Hola

Tengo la siguiente sql:

SELECT COUNT(*) AS Expr1
FROM ...
WHERE ((CONTRATOS_INSTALACIONES.CONINS_CODCLIENTE
+ CONTRATOS_INSTALACIONES.CONINS_CODINSTALA +
CONTRATOS_INSTALACIONES.CONINS_CODINSTALA )
NOT IN
(SELECT PTTRAINS_CLIENTE +
PTTRAINS_INSTALACION + PTTRAINS_INSTALACION_TIPO
FROM PT_TRABAJADORES_JORNADA WITH
(NOLOCK)))

El problema que tengo es que cuando pongo IN de los 4000 registros que hay
me coge 360,eso es correcto, pero cuando pongo NOT IN en vez de cogerme
4000-360 no me coge ninguno, me da 0, porque puede ser?

Saludos, Oscar


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida