Oracle
 sql >> Baza danych >  >> RDS >> Oracle

SQL:jak ograniczyć sprzężenie w pierwszym znalezionym wierszu?

Kluczowym słowem jest tutaj PIERWSZY . Możesz użyć funkcji analitycznej FIRST_VALUE lub zagregować konstrukcję FIRST .
Dla FIRST lub LAST wydajność nigdy nie jest gorsza i często lepsza niż odpowiednik FIRST_VALUE lub LAST_VALUE skonstruować, ponieważ nie mamy zbędnego sortowania okien, a w konsekwencji niższy koszt wykonania:

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

Od 12c wprowadzono operator LATERAL , a także CROSS/OUTER APPLY złączenia, umożliwiają użycie skorelowanego podzapytania po prawej stronie JOIN klauzula:

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. Jak wywołać procedurę składowaną Oracle w Pythonie?

  2. Jak utworzyć i wykonać dynamiczne zapytanie w procedurze składowanej Oracle?

  3. Błąd czasu wykonywania:-2147217887(80040e21) System nie może znaleźć tekstu komunikatu dla numeru komunikatu 0x80040e21 w pliku komunikatu dla OraOLEDB

  4. Zwróć wartość zmiennej sql z wnętrza Oracle SQL Query z powrotem do kodu .NET

  5. wykonaj natychmiastową sekwencję zmiany nie działa