Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/01/2012, 15h10   #1
Membre habitué
 
Jean-Philippe CHENU
Inscription : mars 2006
Messages : 197
Détails du profil
Informations personnelles :
Nom : Jean-Philippe CHENU
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : mars 2006
Messages : 197
Points : 110
Points : 110
Par défaut Afficher une liste de nombres

Bonjour ,

On m' a donné une liste de nombres .
exemple :
10
50
100
200
...
742


Je dois créer autant d’enregistrements dans une table qu'il y a de nombres.
Je pourrais faire
Code :
1
2
3
4
5
6
7
INSERT INTO ma_table (champ1 , nombre )
SELECT 'toto' , 10 ;
INSERT INTO ma_table (champ1 , nombre )
SELECT 'toto' , 50 ;
...
INSERT INTO ma_table (champ1 , nombre )
SELECT 'toto' , 50 ;
Y a-t-il une astuce pour faire cela avec 1 seul insert , donc 1 seul select ?

Je pourrais peut-être transformer (avec vi ) ma liste verticale en liste sous la forme (10,50,100,200,...742) ( ça je sais le faire )

En fait si j'arrive à faire un select à partir de (10,50,100,200,...742) qui m'afficherait :
10
50
100
200
...
742, ce serait gagné .

(L'idée était aussi de ne pas passer par une table intermédiaire créée à partir d'un copy )

Merci d'avance
jeanphi45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 17h03   #2
Membre habitué
 
Jean-Philippe CHENU
Inscription : mars 2006
Messages : 197
Détails du profil
Informations personnelles :
Nom : Jean-Philippe CHENU
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : mars 2006
Messages : 197
Points : 110
Points : 110
En surfant j'ai trouvé ceci , la fonction unnest() (à partir de postgres 8.4)

(merci à http://code18.blogspot.com/2009/12/s...stgres-84.html )

Code :
SELECT unnest(ARRAY[10, 50, 100 , ... , 742])
donne :
10
50
100
...
742

Avant 8.4 , le site cité plus haut donne le code pour créer l'équivalent de la fonction unnest
jeanphi45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 17h18   #3
Membre habitué
 
Jean-Philippe CHENU
Inscription : mars 2006
Messages : 197
Détails du profil
Informations personnelles :
Nom : Jean-Philippe CHENU
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : mars 2006
Messages : 197
Points : 110
Points : 110
J'ai aussi trouvé cela pour avant postgres 8.4 :

Code :
1
2
3
SELECT myarray[i] AS element
 FROM  (SELECT ARRAY[10,50,100, ...742] AS myarray) AS foo
  CROSS JOIN generate_series(1, 55) AS i ;
En mettant bien le nb d'item (ici 55) dans le generate_series .
jeanphi45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 20h13   #4
Modérateur
 
Inscription : octobre 2008
Messages : 1 508
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 508
Points : 2 040
Points : 2 040
Autre solution: la clause VALUES. Exemple:

Code :
1
2
3
4
5
6
7
SELECT * FROM (VALUES (5),(6),(7)) list;
 column1 
---------
       5
       6
       7
(3 rows)
On peut aussi nommer la ou les colonnes:
Code :
1
2
3
4
5
6
7
8
 
SELECT * FROM (VALUES (3),(6),(12)) AS list(j);
 j  
----
  3
  6
 12
(3 rows)
estofilo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 08h52   #5
Membre habitué
 
Jean-Philippe CHENU
Inscription : mars 2006
Messages : 197
Détails du profil
Informations personnelles :
Nom : Jean-Philippe CHENU
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : mars 2006
Messages : 197
Points : 110
Points : 110
Merci pour cette info.

Pour compléter : la dernière méthode fonctionne à partir de la version 8.2
jeanphi45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h21.


 
 
 
 
Partenaires

Hébergement Web