Page 1 sur 1

Interrogation de la gestion des NULL

Posté : 08 août 2013, 17:55
par karatetiger
Bonjour à tous.

Petite question sur une portion de code qui ne renvoie pas ce que mon cerveau pense :).

La voila

drop table teste;
create table teste(dp number(2), ca number(2), nbr number(2));

insert into teste values(73,4,1);
insert into teste values(73,23,1);
insert into teste values(73,97,2);
insert into teste values(73,NULL,1);

select count(*) from teste;
select count(*) from teste2;

drop table teste2;
create table teste2(dp2 number(2), ca2 number(2), nbr2 number(2));
insert into teste2 values(73,97,1);

select dp, ca, nbr, nbr2
from teste, teste2
where dp=dp2(+)
and ca is null
and ca2 is null;

Dans ma tête, utilisant une jointure externe je m'attends à récuperer une ligne 73 NULL 1 NULL
mais la requête ne renvoie rien. Je pense que c'est un souci de gestion de null mélangé à la jointure externe mais si quelqu'un pouvait m'éclaircir ce serait super.

Merci

kara

Re: Interrogation de la gestion des NULL

Posté : 09 août 2013, 18:21
par moogli
Salut,

Je t'invite a utiliser une jointure normalisée plus compréhensible que les notations oracle foireuse ;) http://sqlpro.developpez.com/cours/sqlaz/jointures/ c'est plus clair à lire et surtout utilisable partout.

A priori la jointure c'est d2 qui este référencé dans la table 1.
Ensuite tu n'a pas de ca2 null donc sauf si tu fait un produit cartésien (que tu compte faire avec ta jointure externe) tu ne peux avoir de résultat.
Vire le prédicat et regarde ce que tu as colle résultat.

@+

Re: Interrogation de la gestion des NULL

Posté : 30 sept. 2013, 09:32
par antoine94200
tu veux faire ça :
select dp, ca, nbr, nbr2
from teste, teste2
where dp=dp2(+)
and ca is null
and ca2 is null;

Tu es sous oracle ?
si tu veux récupérer (73,NULL,1) avec ce que tu as donné:
select dp, ca, nbr, nbr2 from teste,test2 where teste.dp=teste2.dp2 and teste.ca is null.
tu auras : 73,NULL,1,1