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
Dies funktioniert wie erwartet. Die Sache ist, dass ich immer möchte, dass alle Zeilen von ATABLE1 angezeigt werden und auch einige Einschränkungen gelten.
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
Warum werden nicht alle Spalten von ATABLE1 auch bei Linksverknüpfung angezeigt? Wie kann ich sie erscheinen lassen?
Vielen Dank im Voraus.
Antworten:
Wenn Sie der optionalen / äußeren Tabelle WHERE-Filter hinzufügen, ändern Sie die Abfrage in eine INNER JOIN. Sie müssen die Bedingung zum Join, zur abgeleiteten Tabelle oder zum CTE hinzufügen.
quelle
Das liegt daran, dass Sie Ihrer Abfrage mitteilen, dass nur ATABLE.column1 zurückgebracht werden soll. Wenn Sie Anfragen von gbn oder Jack annehmen, geben Sie in Ihrer SELECT-Klausel einfach ATABLE1. * An (oder benennen Sie jeden von ihnen speziell):
quelle
Eine Alternative zum Hinzufügen der Bedingung zum Join besteht darin,
null
im Filter zu testen :Ich bevorzuge diese Variante, aber Sie können sie als weniger lesbar betrachten:
Der einzige Grund dafür ist, dass Sie die Bedingung aus irgendeinem Grund nicht in den Filter einfügen können (was manchmal bei einer komplexeren Abfrage der Fall ist).
quelle