Soient T1 et T2
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
CREATE TABLE TT1
(
  ID_TT1    VARCHAR2(1 CHAR),
  DATA_TT1  VARCHAR2(2 CHAR)
)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
CREATE TABLE CMC.TT2
(
  FK_TT1    VARCHAR2(1 CHAR),
  DATA_TT2  VARCHAR2(2 CHAR)
)
contenant respectivement :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
ID_TT1,DATA_TT1
a,a1
b,b1
c,c1
,n1
a,a2
b,b2
c,c2
,n2
,n3
 ,n4
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
FK_TT1,DATA_TT2
a,aa
b,bb
c,cc
,nn
Pouvez-vous me dire pourquoi ne me retourne pas le résultat escompté (c'est-à-dire également le matching pour les records de TT1 ayant une valeur null dans ID_TT1) ? Le résultat est plus bas.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
SELECT *
FROM TT1
    JOIN TT2 
     ON TT1.ID_TT1 = TT2.FK_TT1;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
ID_TT1,DATA_TT1,FK_TT1,DATA_TT2
a,a1,a,aa
b,b1,b,bb
c,c1,c,cc
a,a2,a,aa
b,b2,b,bb
c,c2,c,cc
Par contre, j'obtiens le résultat souhaité en précisant la clause 'on' :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
SELECT *
FROM TT1
    JOIN TT2 
       ON ( (TT1.ID_TT1 = TT2.FK_TT1)
         OR ( (TT1.ID_TT1 is null) and (TT2.FK_TT1 is null))) ;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
ID_TT1,DATA_TT1,FK_TT1,DATA_TT2
a,a1,a,aa
a,a2,a,aa
b,b1,b,bb
b,b2,b,bb
c,c1,c,cc
c,c2,c,cc
,n1,,nn
,n2,,nn
,n3,,nn
Je sais bien que la démarche peut sembler étrange, mais j'ai besoin de comprendre.

D'avance, je vous remercie.

Brolon, qui va sans doute se faire reprendre de volée