[Pgsql-ayuda] Join con campos null
Antonio Castro
acastro@ciberdroide.com
Mon, 31 Dec 2001 09:57:38 +0100 (CET)
On 20 Dec 2001, Lic. Jaime N. Charles Trevi=F1o wrote:
> El jue, 20-12-2001 a las 13:50, Oscar Cano R. escribi=F3:
> > >Saludos ...
> > >Tengo un problema con un query, el cual realiza un
> > >join de dos tablas, como las sig:
> > >La Tabla A consta de dos campos
> > >cve_a not null
> > >Nombre not null
> > >la llave de esta tabla es el campo cve_a
> > >
> > >La Tabla B consta de dos campos
> > >cve_b not null
> > >cve_a
> > >Descripcion not null
> > >la llave de esta tabla es el campo cve_b
> > >
> > >quiero hacer un select de la siguiente froma:
> > >SELECT nombre,Descripcion
> > >FROM A,B
> > >WHERE A.cve_a =3D B.cve_a;
> > >
> > >Donde el campo B.cve_a (de la tabla B), puede contener
> > >valores NUll. Cuando ejecuto el select me trae solo
> > >los
> > >registros que cumplen la condicion: A.cve_a =3D B.cve_a,
> > >pero no me trae los registros de la tabla B que tienen
> > >el campo cve_a =3D NULL
> > >
> > >En oracle se que se puede hacer de la siguiente forma:
> > >SELECT nombre,Descripcion
> > >FROM A,B
> > >WHERE A.cve_a =3D B.cve_a (+);
Supongo que lo que quieres hacer es lo siguiente:
SELECT nombre,Descripcion
FROM A,B
WHERE ( A.cve_a =3D B.cve_a ) OR ( B.cve_a IS NULL )
Seguramente los parentesis no son necesarios.
De todas formas tu query es un join extra=F1o. Si tu tabla A tiene=20
digamos (m) registros y tu tabla B tiene (n) registros.
Obtendr=E1s (m) tuplas por cada B.cve_a igual a NULL .
No se me ocurre que inter=E9s puede tener una cosa as=ED en la pr=E1ctica.
Ignoro que representan las entidades A y B y que tipo de relaci=F3n=20
quieres establecer entre ellas. Si describes todo ello con palabras
quiz=E1s pueda ayudarte mejor.
> > Lo que yo hice fue poner un campo que por default B.cve_a tome un=20
> > valor que te substitulla el null p.ej
> > tabla A
> > cve_a | Nombre
> > 0 | (NULL)
> > 1 | Juan
> > 2 | Oscar
> > 3 | Maria
> > 4 | Rocio
> >=20
> > tabla B(cve_a default 0)
> > cve_b | cve_a | Descripcion
> > 1 | 1 | cuate
> > 2 | 0 | Interesado
> > 3 | 0 | Barbero
> > 4 | 2 | Hermano
> > 5 | 0 | Ley
> >=20
> > Asi es como yo solucione este rollo, espero te sirva.
> > Salu2.
Bueno ya expliqu=E9 que un cero y un nulo no tienen nada que ver
y usar valores ficticios en lugar de NULL no suele ser buena=20
idea.
Un saludo
Antonio Castro
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--=
+
/\ /\ Ciberdroide Inform=E1tica (Tienda de Linux)
\\W// <<< http://www.ciberdroide.com >>>
=09 _|0 0|_ =20
+-oOOO--(___o___)--OOOo----------------------------------------------------=
+=20
| . . . . U U . . . . Antonio Castro Snurmacher acastro@ciberdroide.com =
| =20
| . . . . . . . . . . =
|=20
+()()()----------()()()----------------------------------------------------=
+
| *** 1.700 sitios clasificados por temas sobre Linux en ***Donde_Linux*** =
|
| <<< http://www.ciberdroide.com/misc/donde/dondelinux.html >>> =
|
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--=
+