Che cos'è un modo veloce/leggibile per SELEZIONARE una relazione da "nothing" che contiene un elenco di numeri. Voglio definire quali numeri impostando un valore iniziale e finale. Sto usando Postgres SQL e SQLite e sarei interessato alle soluzioni generiche che funzioneranno su entrambe le piattaforme/molte.SQL: selezionare un elenco di numeri da "nothing"
relazione uscita desiderata:
# x
0
1
2
3
4
So che posso selezionare una singola riga dal "nulla": SELECT 0,1,2,3,4
Ma questo seleziona i valori come colonne invece delle righe e richiede per specificare tutti i valori nella query invece di utilizzare solo i miei valori iniziali e finali: 0
e 4
.
In Postgres si hanno una funzione speciale generate_series
per questo caso:
SELECT * FROM generate_series(0,4) x;
Questo funziona bene, ma è non-standard. Posso anche immaginare alcune soluzioni complicate utilizzando tabelle temporanee, ma mi piacerebbe avere qualcosa di generico e semplice come:
SELECT * FROM [0..4]
Forse utilizzando l'istruzione SEQUENCE
o una combinazione di magia e SELECT 0
SELECT 4
?
Si potrebbe anche usare numeri fino a 1.000 direi - metti forse un indice sul tavolo. Altrimenti, crea viste come numbers_to_1000, numbers_to_1000000 per incapsulare le giunzioni incrociate. –
@ Juve, potresti accettare qualche risposta o postare la tua risposta e accettarla? –
Quando ho iniziato a guardare, sono rimasto stupito da quanto sia imbarazzante questo compito apparentemente semplice. Ecco un articolo con alcune possibilità in più (ma suggerisce che nulla supera GENERATE_SERIES() da PostgreSQL): https://blog.jooq.org/2013/11/19/how-to-create-a-range-from-1 -to-10-in-sql/ – Dodecaphone