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

Kolejność SQL według elementów z klauzuli IN

Chociaż Twoja logika i powyższe rozwiązania są dobre dla małej skali, jeśli mówisz o ponad 65 000 elementów, potrzebujesz rozwiązania, które jest skalowalne.

Proponuję podzielić to zadanie na 2 kroki.

Krok 1

Utwórz tabelę tymczasową,Ta tabela tymczasowa będzie miała minimum 3 kolumny

TEMP_ITEM_ORDER_TABLE (
  session_key varchar2(50),
  item_id number,
  item_report_order number
)

Za każdym razem, gdy użytkownik zleca takie zapytanie, wstaw dane, tj. identyfikatory pozycji i ich kolejność nr do tej tabeli tymczasowej, z pewnym unikalnym kluczem do identyfikacji sesji użytkownika (ewentualnie identyfikator użytkownika lub identyfikator sesji). Ta sztuczka polega na unikaniu kolizji list pozycji, gdy wielu użytkowników jednocześnie zgłasza zgłoszenia.

Krok 2

Teraz uruchom zapytanie raportu łączące główną tabelę, tabelę tymczasową za pomocą session_key . W kolejności zapytań dane oparte na kolejności wprowadzania danych (zapisane już w tabeli tymczasowej)

SELECT 
  T1.* , T2.item_report_order
FROM ITEM T1, TEMP_ITEM_ORDER_TABLE T2
  WHERE T1.ITEM_ID = T2.ITEM_ID
  AND T2.session_key = :input_session_key
  ORDER BY t2.item_report_order

Ta metoda to

  1. niezależny od bazy danych
  2. skalowalny z dowolną liczbą wejść
  3. Zapewnia najlepszą możliwą wydajność

Uwaga:Aby jeszcze bardziej poprawić wydajność zapytania, utwórz indeks na session_key, item_id w tabeli tymczasowej, utwórz również indeks na item_id na tabeli ITEM (jeśli jeszcze nie istnieje)

Edycja:Oracle oferuje Globalny tabelę tymczasową funkcja, która tworzy, ma funkcje zezwalające tylko na zapisy w sesji i automatyczne czyszczenie po zatwierdzeniu/zakończeniu sesji itp. Możesz skorzystać z tej funkcji i uniknąć klucza sesji, ale to rozwiązanie nie może być replikowane na innych produktach bazodanowych, chyba że obsługuje podobną funkcję.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Usuń wszystkie znaki po określonym znaku w PL/SQL

  2. Upuść ograniczenie ze znakiem specjalnym w Oracle

  3. Siatki bezpieczeństwa

  4. Formularze Oracle w R12/R12.2

  5. Oracle SQL, połącz wiele kolumn + dodaj tekst