Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

SQL:bagaimana cara membatasi gabungan pada baris pertama yang ditemukan?

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 */
;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kesalahan Oracle ORA-12154 pada IIS lokal, tetapi tidak dengan Server Pengembangan Visual Studio

  2. Nomor Oracle dan varchar bergabung

  3. SQL Sub-Query - cara menemukan nilai min

  4. Memparalelkan panggilan dalam PL/SQL

  5. 12.2 Fitur Baru RAC/GI