Kata kuncinya di sini adalah PERTAMA . Anda dapat menggunakan fungsi analitik FIRST_VALUE
atau konstruksi agregat FIRST
.
Untuk FIRST
atau LAST
kinerjanya tidak pernah lebih buruk dan sering kali lebih baik daripada FIRST_VALUE
yang setara atau LAST_VALUE
membangun karena kami tidak memiliki penyortiran jendela yang berlebihan dan akibatnya biaya eksekusi yang lebih rendah:
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 */
;
Sejak 12c memperkenalkan operator LATERAL
, serta CROSS/OUTER APPLY
bergabung, memungkinkan untuk menggunakan subquery berkorelasi di sisi kanan JOIN
klausa:
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 */
;