Het sleutelwoord hier is EERSTE . U kunt de analytische functie FIRST_VALUE
. gebruiken of aggregatieconstructie FIRST
.
Voor FIRST
of LAST
de prestatie is nooit slechter en vaak beter dan de equivalente FIRST_VALUE
of LAST_VALUE
constructie omdat we geen overbodige venstersortering hebben en als gevolg daarvan lagere uitvoeringskosten:
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 */
;
Sinds 12c de operator LATERAL
introduced heeft geïntroduceerd , evenals CROSS/OUTER APPLY
joins, maak het mogelijk om een gecorreleerde subquery te gebruiken aan de rechterkant van JOIN
clausule:
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 */
;