Das Schlüsselwort hier ist FIRST . Sie können die Analysefunktion FIRST_VALUE
verwenden oder Aggregatkonstrukt FIRST
.
Für FIRST
oder LAST
die Leistung ist nie schlechter und häufig besser als der entsprechende FIRST_VALUE
oder LAST_VALUE
konstruieren, weil wir keine überflüssige Fenstersortierung und damit einen geringeren Ausführungsaufwand haben:
select table_A.id, table_A.name, firstFromB.city
from table_A
join (
select table_B.id2, max(table_B.city) keep (dense_rank first order by table_B.city) city
from table_b
group by table_B.id2
) firstFromB on firstFromB.id2 = table_A.id
where 1=1 /* some conditions here */
;
Seit 12c den Operator LATERAL
eingeführt hat , sowie CROSS/OUTER APPLY
Joins ermöglichen es, eine korrelierte Unterabfrage auf der rechten Seite von JOIN
zu verwenden Klausel:
select table_A.id, table_A.name, firstFromB.city
from table_A
cross apply (
select max(table_B.city) keep (dense_rank first order by table_B.city) city
from table_b
where table_B.id2 = table_A.id
) firstFromB
where 1=1 /* some conditions here */
;