Ключовата дума тук е ПЪРВИ . Можете да използвате аналитична функция FIRST_VALUE
или сборна конструкция FIRST
.
За FIRST
или LAST
производителността никога не е по-лоша и често по-добра от еквивалентната FIRST_VALUE
или LAST_VALUE
конструкция, тъй като нямаме излишно сортиране на прозорци и като следствие по-ниски разходи за изпълнение:
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 */
;
От 12c въведен оператор LATERAL
, както и CROSS/OUTER APPLY
присъединява, прави възможно използването на корелирана подзаявка от дясната страна на JOIN
клауза:
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 */
;