sql >> Database teknologi >  >> RDS >> Mysql

Rumdatabase fuld dynamisk forespørgsel

Du kan ikke bruge bindevariabler (parametre) til at referere til kolonner i ORDER BY-udtrykket. Du kan dog bruge bind-variablen i et udtryk som sådan:

@Query("select * from coin ORDER BY
CASE :order
WHEN 'percent_change_24h' THEN percent_change_24h
WHEN 'other_column_name' THEN other_column_name
END asc limit :numberOfCoins")
fun getAllTop(order: String, numberOfCoins: Int): Flowable<List<CoinDB>>

Du bliver nødt til at tilføje en separat WHEN-sætning til CASE-sætningen for hver kolonne/udtryk, du vil sortere efter, og du kan have brug for eller vil tilføje en ELSE-sætning for de situationer, hvor :order bind-variablen ikke matcher nogen af dine standardsager.

Begrænsningen for bindevariabler gælder også for where-sætningen og projektionen (vælg liste). Bind-variable har deres egne værdier i dine eksempler, enten String eller Int for henholdsvis :order og :numberOfCoins.



  1. Importer Postgres-data til RDS ved hjælp af S3 og aws_s3

  2. Qt:Windows 10:QMYSQL-driveren er ikke indlæst

  3. Forstå Lob-segmenter (SYS_LOB) i Oracle?

  4. SQL flertal/ental søgninger