Từ khóa ở đây là FIRST . Bạn có thể sử dụng hàm phân tích FIRST_VALUE
hoặc cấu trúc tổng hợp FIRST
.
Đối với FIRST
hoặc LAST
hiệu suất không bao giờ kém hơn và thường xuyên tốt hơn FIRST_VALUE
tương đương hoặc LAST_VALUE
cấu trúc bởi vì chúng tôi không có sắp xếp cửa sổ thừa và kết quả là chi phí thực thi thấp hơn:
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 */
;
Kể từ khi 12c giới thiệu toán tử LATERAL
, cũng như CROSS/OUTER APPLY
tham gia, làm cho nó có thể sử dụng một truy vấn con tương quan ở phía bên phải của JOIN
mệnh đề:
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 */
;