Essayez de créer un échantillon DB comme ceci:Oracle 11g jointure gauche question
CREATE TABLE "APP"
( "CODICE" VARCHAR2(20 BYTE)
);
Insert into APP (CODICE) values ('A');
Insert into APP (CODICE) values ('B');
Insert into APP (CODICE) values ('C');
Insert into APP (CODICE) values ('D');
Insert into APP (CODICE) values ('E');
CREATE TABLE "APP2"
( "CODICE" CHAR(1 BYTE),
"STATO" VARCHAR2(20 BYTE)
);
Insert into APP2 (CODICE,STATO) values ('A','E');
Insert into APP2 (CODICE,STATO) values ('B','E');
Insert into APP2 (CODICE,STATO) values ('C','E');
Maintenant, essayez une jointure gauche comme ceci:
select app.codice codice1,
case
when app.codice in ('A','B','C') then 'OK'
when app.codice in ('D','E') then 'KO'
end azione,
tt.codice codice2,
tt.stato
from app left join (select app2."CODICE", 'E' stato
from app2) tt on app.codice=tt.codice
Le résultat est très étrange, la colonne « Stato "appartient à la table de droite, donc, dans la jointure à gauche, devrait être null si la clé de droite est nulle, donc si codice2 est nul. Pour codice = D ou E, la table de droite ne correspond pas, mais la colonne d'état n'est pas nulle. Il ne se produit pas si vous remplacez la colonne statique « E » stato avec le stato réel de la colonne dans la table APP2
Montrez-nous le résultat actuel ainsi que le résultat souhaité. (Texte mis en forme s'il vous plaît.) – jarlh
fait ci-dessous ..... – user5919369