PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

ORDINA PER la lista valori IN

In Postgres 9.4 o successivo, questo è il più semplice e veloce :

SELECT c.*
FROM   comments c
JOIN   unnest('{1,3,2,4}'::int[]) WITH ORDINALITY t(id, ord) USING (id)
ORDER  BY t.ord;
  • WITH ORDINALITY è stato introdotto con Postgres 9.4.

  • Non c'è bisogno di una sottoquery, possiamo usare la funzione di ritorno set come una tabella direttamente. (Alias ​​"funzione da tavolo".)

  • Una stringa letterale da consegnare nell'array invece di un costruttore ARRAY può essere più facile da implementare con alcuni client.

  • Per comodità (facoltativamente), copia il nome della colonna a cui ci stiamo unendo (id nell'esempio), così possiamo unirci con un breve USING clausola per ottenere una sola istanza della colonna join nel risultato.

  • Funziona con qualsiasi tipo di ingresso. Se la colonna chiave è di tipo text , fornisci qualcosa come '{foo,bar,baz}'::text[] .

Spiegazione dettagliata:

  • PostgreSQL unnest() con numero elemento