PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Repozytorium - sortowanie według w natywnym zapytaniu nie działa

Jeśli jest to przygotowana instrukcja i jest to wartość powiązania podana w ORDER BY klauzula, która jest ważna, ALE...

Podana wartość wiązania nie będzie interpretowana jako tekst SQL. Oznacza to, że wartość będzie postrzegana jako zwykła wartość (jak dosłowny ciąg znaków). Nie będzie widoczny jako nazwa kolumny ani ASC lub DESC słowo kluczowe.

W kontekście Twojego oświadczenia, podaj wartość :orderClause bind placeholder, będzie miał taki sam efekt, jak gdybyś napisał ORDER BY 'some literal' .

I to wcale nie powoduje żadnej kolejności wierszy.

(Jest to prawda przynajmniej w każdej bibliotece klienta SQL, której używałem z DB2, Teradata, Oracle, SQL Server, MySQL i MariaDB (JDBC, Perl DBI, ODBC, Pro/C, i in.)

(MyBatis zapewnia wygodny mechanizm podstawiania zmiennych w tekście SQL, dynamicznie zmieniający tekst SQL przed jego przygotowaniem, ale te podstawienia są obsługiwane PRZED przygotowaniem instrukcji i nie zamieniają się w symbole zastępcze wiązania w instrukcji.)

Możliwe jest uzyskanie odrobiny „dynamicznego” porządkowania za pomocą starannie przygotowanych wyrażeń w klauzuli ORDER BY. Na przykład, nasz statyczny tekst SQL może wyglądać tak:

  ORDER BY CASE WHEN :sort_param = 'name ASC'  THEN activation_name END ASC
         , CASE WHEN :sort_param = 'name DESC' THEN activation_name END DESC

(Tekst SQL nie jest tutaj dynamiczny, w rzeczywistości jest statyczny, to tak, jakbyśmy pisali.

 ORDER BY expr1 ASC
        , expr1 DESC

Sztuczka polega na tym, że wyrażenia w klauzuli ORDER BY warunkowo zwracają albo wartość jakiejś kolumny z każdego wiersza, albo zwracają literał (w powyższym przykładzie literał NULL), w zależności od wartości powiązania wartość, oceniana w czasie wykonania.

Efekt netto polega na tym, że możemy „dynamicznie” uzyskać efekt:

 ORDER BY activation_name ASC, NULL DESC

lub

 ORDER BY NULL ASC, activation_name DESC

lub

 ORDER BY NULL ASC, NULL DESC

w zależności od tego, jaką wartość dostarczamy dla symbolu zastępczego :sort_param.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Skąd mogę pobrać źródło libpq?

  2. PostgreSQL:Usuń bazę danych, ale baza danych nadal tam jest

  3. Konfigurowanie trwałych danych dla Carto/Postgresql na ACI

  4. Zainstaluj PostgreSQL na Ubuntu 20.04

  5. SqlAlchemy Postgres JSON jak filtrować za pomocą operatora znaku zapytania?