Oracle
 sql >> база данни >  >> RDS >> Oracle

SQL:как да ограничим присъединяването към първия намерен ред?

Ключовата дума тук е ПЪРВИ . Можете да използвате аналитична функция 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 */
;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-01005 грешка при свързване с ODP.Net

  2. Проверете дали таблицата съществува в базата данни - PL SQL

  3. Как да отделя дял от таблица и да го прикача към друг в oracle?

  4. събиране на годишни обобщени данни за по-късен бърз достъп

  5. Java:наборът от резултати е празен при извикване на съхранена процедура с референтен курсор като OUT