CREATE TABLE "ATABLE1"
(
"COLUMN1" VARCHAR2(20 BYTE),
"COLUMN2" VARCHAR2(20 BYTE)
);
CREATE TABLE "ATABLE2"
(
"COLUMN1" VARCHAR2(20 BYTE),
"COLUMN2" VARCHAR2(20 BYTE)
);
Insert into ATABLE1 (COLUMN1,COLUMN2) values ('A','1');
Insert into ATABLE1 (COLUMN1,COLUMN2) values ('B','2');
Insert into ATABLE2 (COLUMN1,COLUMN2) values ('A',null);
Insert into ATABLE2 (COLUMN1,COLUMN2) values ('A','1');
Insert into ATABLE2 (COLUMN1,COLUMN2) values ('A','2');
select ATABLE1.column1, count(ATABLE2.column1)
from ATABLE1 Left OUTER JOIN ATABLE2 on ATABLE1.column1 = atable2.column1
GROUP BY ATABLE1.column1;
Result
COLUMN1 COUNT(ATABLE2.COLUMN1)
-------------------- ----------------------
A 3
B 0
Cela fonctionne comme prévu. Le fait est que je veux toujours que toutes les lignes de ATABLE1 soient affichées et que j'applique également certaines restrictions.
select ATABLE1.column1, count(ATABLE2.column1)
from ATABLE1 Left OUTER JOIN ATABLE2 on ATABLE1.column1 = atable2.column1
where atable2.column2 = '1'
GROUP BY ATABLE1.column1;
COLUMN1 COUNT(ATABLE2.COLUMN1)
-------------------- ----------------------
A 1
Pourquoi toutes les colonnes d'ATABLE1 ne sont-elles pas affichées même avec la jointure gauche? Comment puis-je les faire apparaître?
Merci beaucoup d'avance.
Réponses:
Lorsque vous ajoutez des filtres WHERE à la table facultative / externe, vous modifiez la requête en une INNER JOIN. Vous devez ajouter la condition dans la jointure, la table dérivée ou le CTE.
la source
C'est parce que vous dites à votre requête de ne ramener que ATABLE.column1. Si vous prenez gbn ou les requêtes de Jack, indiquez simplement ATABLE1. * (Ou nommez spécifiquement chacun d'eux) dans votre clause SELECT:
la source
Une alternative à l' ajout de la condition à la jointure consiste à tester
null
dans le filtre:Je préfère cette variante mais vous pouvez la considérer comme moins lisible:
La seule raison pour cela est que, pour une raison quelconque, vous ne pouvez pas mettre la condition dans le filtre (ce qui est parfois le cas dans une requête plus complexe)
la source