Consulta con Left Join

19/11/2003 - 01:16 por Fernando | Informe spam
Tengo una tabla1 con un atributo cod1 (string) y otra tabla2 con cod2
(string), clave (string) y codprov (int). Yo quiero tomar todos los
registros que estan en tabla2 y no estan tabla1 pero que clave <> '' y
codproc = 10.

Hice 2 consultas que parecen iguales pero me arrojan resultados distintos
????

Select * from tabla1
where cod2 not in (Select cod1 from tabla1) and
clave <> '' and codproc = 10

Select t2.cod2, t2.clave, t2.codprov
from tabla2 t2
LEFT JOIN tabla1 t1 ON t1.cod1 = t2.cod2
where t2.clave <> '' and t2.codproc = 10

Alguien puede ver la diferencia.

Gracias de antemano
Saludos
Fernando

Preguntas similare

Leer las respuestas

#1 Maximiliano Damian Accotto
19/11/2003 - 01:29 | Informe spam
estimado:

a ver!! la primer consulta estas haciendo las q no estan (y es correcto)
pero si haces un Left join se uniran las 2 tablas trayendo todos los
registros de la izquierda, es posible q al traer esos registros tengas nulos
porque no hay clave en la otra tabla q coincida (por eso lo del LEFT o
RIGHT)

asi q deberias agregarle al where ademas que traiga las nulas (son las q
no estan digamos)

Select t2.cod2, t2.clave, t2.codprov
from tabla2 t2
LEFT JOIN tabla1 t1 ON t1.cod1 = t2.cod2
where t2.clave <> '' and t2.codproc = 10 and

t2.cod2 is null

se entiende?



Accotto Maximiliano Damian
Fundicion San Cayetano S.A.
Buenos Aires Argentina

Gerente de Sistemas y Tecnologia
()

"Fernando" escribió en el mensaje
news:%23%
Tengo una tabla1 con un atributo cod1 (string) y otra tabla2 con cod2
(string), clave (string) y codprov (int). Yo quiero tomar todos los
registros que estan en tabla2 y no estan tabla1 pero que clave <> '' y
codproc = 10.

Hice 2 consultas que parecen iguales pero me arrojan resultados distintos
????

Select * from tabla1
where cod2 not in (Select cod1 from tabla1) and
clave <> '' and codproc = 10

Select t2.cod2, t2.clave, t2.codprov
from tabla2 t2
LEFT JOIN tabla1 t1 ON t1.cod1 = t2.cod2
where t2.clave <> '' and t2.codproc = 10

Alguien puede ver la diferencia.

Gracias de antemano
Saludos
Fernando


Respuesta Responder a este mensaje
#2 Fernando
19/11/2003 - 01:46 | Informe spam
Entonces a mi segunda consulta (la del Left) tendria que agregarle la
condicion "and t2.cod2 is null". Es lo mismo que decir t2.cod2 = '' ó cambia
en algo el resultado ????
Muchas gracias (y te agredezco por la respuesta por el otro tema en el otro
grupo.)
Saludos
Fernando

"Maximiliano Damian Accotto" escribió
en el mensaje news:
estimado:

a ver!! la primer consulta estas haciendo las q no estan (y es correcto)
pero si haces un Left join se uniran las 2 tablas trayendo todos los
registros de la izquierda, es posible q al traer esos registros tengas


nulos
porque no hay clave en la otra tabla q coincida (por eso lo del LEFT o
RIGHT)

asi q deberias agregarle al where ademas que traiga las nulas (son las


q
no estan digamos)

Select t2.cod2, t2.clave, t2.codprov
from tabla2 t2
LEFT JOIN tabla1 t1 ON t1.cod1 = t2.cod2
where t2.clave <> '' and t2.codproc = 10 and

t2.cod2 is null

se entiende?



Accotto Maximiliano Damian
Fundicion San Cayetano S.A.
Buenos Aires Argentina

Gerente de Sistemas y Tecnologia
()

"Fernando" escribió en el mensaje
news:%23%
> Tengo una tabla1 con un atributo cod1 (string) y otra tabla2 con cod2
> (string), clave (string) y codprov (int). Yo quiero tomar todos los
> registros que estan en tabla2 y no estan tabla1 pero que clave <> '' y
> codproc = 10.
>
> Hice 2 consultas que parecen iguales pero me arrojan resultados


distintos
> ????
>
> Select * from tabla1
> where cod2 not in (Select cod1 from tabla1) and
> clave <> '' and codproc = 10
>
> Select t2.cod2, t2.clave, t2.codprov
> from tabla2 t2
> LEFT JOIN tabla1 t1 ON t1.cod1 = t2.cod2
> where t2.clave <> '' and t2.codproc = 10
>
> Alguien puede ver la diferencia.
>
> Gracias de antemano
> Saludos
> Fernando
>
>


Respuesta Responder a este mensaje
#3 Maximiliano Damian Accotto
19/11/2003 - 02:05 | Informe spam
='' no es igual q is null

='' no es nulo sino 0 caracteres!! me explico?

Accotto Maximiliano Damian
Fundicion San Cayetano S.A.
Buenos Aires Argentina

Gerente de Sistemas y Tecnologia
()

"Fernando" escribió en el mensaje
news:
Entonces a mi segunda consulta (la del Left) tendria que agregarle la
condicion "and t2.cod2 is null". Es lo mismo que decir t2.cod2 = '' ó


cambia
en algo el resultado ????
Muchas gracias (y te agredezco por la respuesta por el otro tema en el


otro
grupo.)
Saludos
Fernando

"Maximiliano Damian Accotto" escribió
en el mensaje news:
> estimado:
>
> a ver!! la primer consulta estas haciendo las q no estan (y es correcto)
> pero si haces un Left join se uniran las 2 tablas trayendo todos los
> registros de la izquierda, es posible q al traer esos registros tengas
nulos
> porque no hay clave en la otra tabla q coincida (por eso lo del LEFT o
> RIGHT)
>
> asi q deberias agregarle al where ademas que traiga las nulas (son


las
q
> no estan digamos)
>
> Select t2.cod2, t2.clave, t2.codprov
> from tabla2 t2
> LEFT JOIN tabla1 t1 ON t1.cod1 = t2.cod2
> where t2.clave <> '' and t2.codproc = 10 and
>
> t2.cod2 is null
>
> se entiende?
>
>
>
> Accotto Maximiliano Damian
> Fundicion San Cayetano S.A.
> Buenos Aires Argentina
>
> Gerente de Sistemas y Tecnologia
> ()
>
> "Fernando" escribió en el mensaje
> news:%23%
> > Tengo una tabla1 con un atributo cod1 (string) y otra tabla2 con cod2
> > (string), clave (string) y codprov (int). Yo quiero tomar todos los
> > registros que estan en tabla2 y no estan tabla1 pero que clave <> '' y
> > codproc = 10.
> >
> > Hice 2 consultas que parecen iguales pero me arrojan resultados
distintos
> > ????
> >
> > Select * from tabla1
> > where cod2 not in (Select cod1 from tabla1) and
> > clave <> '' and codproc = 10
> >
> > Select t2.cod2, t2.clave, t2.codprov
> > from tabla2 t2
> > LEFT JOIN tabla1 t1 ON t1.cod1 = t2.cod2
> > where t2.clave <> '' and t2.codproc = 10
> >
> > Alguien puede ver la diferencia.
> >
> > Gracias de antemano
> > Saludos
> > Fernando
> >
> >
>
>


Respuesta Responder a este mensaje
#4 José Raúl Fenollar Martínez
19/11/2003 - 09:30 | Informe spam
='' no es igual q is null

='' no es nulo sino 0 caracteres!! me explico?



Para que entiendas mejor la diferencia, en este caso ='' querria decir que
existe el registro en la tabla, pero que su valor es cadena vacia, mientras
que is null, signiifcaria que el registro no existe en la tabla.
Respuesta Responder a este mensaje
#5 dbuendiab
19/11/2003 - 20:53 | Informe spam
"José Raúl Fenollar Martínez" wrote in message news:...
> ='' no es igual q is null
>
> ='' no es nulo sino 0 caracteres!! me explico?

Para que entiendas mejor la diferencia, en este caso ='' querria decir que
existe el registro en la tabla, pero que su valor es cadena vacia, mientras
que is null, signiifcaria que el registro no existe en la tabla.



Para que lo entiendas mejor del todo, aquí tienes un juguete para ver
todas las posibilidades que tienes:

CREATE TABLE aa ( a char(1) )
CREATE TABLE bb ( b char(1) )

INSERT aa SELECT '1'
INSERT aa SELECT '2'
INSERT aa SELECT '3'
INSERT aa SELECT '4'
INSERT aa SELECT '5'

INSERT bb SELECT '1'
INSERT bb SELECT '2'
INSERT bb SELECT '4'
INSERT bb SELECT '6'
INSERT bb SELECT '7'

SELECT aa.a, bb.b
FROM aa
LEFT JOIN bb
ON aa.a = bb.b

SELECT aa.a, bb.b
FROM aa
LEFT JOIN bb
ON aa.a = bb.b
WHERE bb.b = ''

SELECT aa.a, bb.b
FROM aa
LEFT JOIN bb
ON aa.a = bb.b
WHERE bb.b IS NULL


SELECT aa.a, bb.b
FROM aa
INNER JOIN bb
ON aa.a = bb.b


SELECT aa.a, bb.b
FROM aa
RIGHT JOIN bb
ON aa.a = bb.b

-
SELECT aa.a, bb.b
FROM aa
FULL JOIN bb
ON aa.a = bb.b

SELECT aa.a, bb.b
FROM aa
CROSS JOIN bb

DROP TABLE aa
DROP TABLE bb

Saludos,

Diego Buendia
Barcelona Spain
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida