PostgreSQL
La base de données la plus sophistiquée au monde.

Ouverture de session

Navigation

Contactez-nous

Administration du site :
"equipe chez postgresqlfr point org"

Contact presse :
"fr chez postgresql point org"

Contact association :
"bureau chez postgresqlfr point org"

Questions PostgreSQL :
 IRC :
  serveur irc.freenode.net
  canal #postgresqlfr

Recherche

Accéder aux archives

« Octobre 2008  
Lun Mar Mer Jeu Ven Sam Dim
  2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31  

Syndication

Flux XML

Sondage

Quelle est la version de PostgreSQL la plus répandue sur vos serveurs ?
8.3
10%
8.2
42%
8.1
40%
8.0
2%
7.4
6%
7.3 ou antérieure
0%
Nombre de votes: 48

Jointure d'un tableau

Technique - général | Jointure d'un tableau

Par jxemo le 08/11/2006 - 19:15

Bonjour,

Comment réaliser une joiture sur les éléments d'un tableau ?
Exemple, j'ai deux tables :

create table A (
idA int primary key,
idsB int[]);

create table B (
idB int primary key,
libelle varchar(20));

Je cherche à faire un select qui me ramène pour chaque ligne de A , idA et un tableau des libéllés de B.
C'est-Ă -dire, si j'ai :
insert into B values (1, 'B1');
insert into B values (2, 'B2');
insert into B values (3, 'B3');
insert into A values (1, array[1, 3]);
insert into A values (2, array[2, 3]);

je veux comme résultat
1, {'B1','B3'}
2, {'B2','B3'}

Comment faire ?
Merci

Options d'affichage des commentaires

Sélectionnez la méthode d'affichage des commentaires que vous préférez, puis cliquez sur "Sauvegarder les paramètres" pour activer vos changements.

Pas Facile

sparky/ = 8 Novembre, 2006 - 23:22

select ida,array[B.libelle,C.libelle] from A join B on (B.idb = idsb[1]) join B as C on ( C.idb=idsb[2]);
ida | array
-----+---------
1 | {B1,B3}
2 | {B2,B3}


Et avec un nombre d'éléments non déterminés ?

jxemo/ = 10 Novembre, 2006 - 16:42

Merci pour la réponse.

Et avec un nombre d'éléments non déterminés ?

Par exemple avec comme données :
insert into A values (1, array[1]);
insert into A values (2, array[2, 3, 6, 8]);
insert into A values (2, array[1, 2, 3, 4, 6, 9, 6]);

ou pour joindre pg_proc avec pg_type via la colonne proargtypes, par exemple ?


Dans ce cas, utiliser plpgsql

sparky/ = 11 Novembre, 2006 - 21:21

Dans ce cas, utiliser plpgsql et utiliser return next.

Voir ici
http://docs.postgresqlfr.org/8.1/plpgsql-control-structures.html

Je suis trop fainéant pour taper le code mais je suis curieux de voir le code :-)


C'est ce que je craignais

jxemo/ = 15 Novembre, 2006 - 19:37

C'est ce que je craignais. C'est dommage qu'on ne puisse pas exécuter des bloc pl sans écrire de fonction. On peut le faire sous oracle est c'est très utile pour certaines opérations de maintenance, d'installation (surtout pendant une mise à jour), de peuplement des données, et des correctifs de données corrompues ou tout autre code qui ne sera executé qu'une fois.

Je voulais Ă©crire un script qui efface toutes les fonctions. Mais si c'est une fonction... :-)

Merci pour la réponse.


© PostgreSQLFr, tous droits rĂ©servĂ©s.
Site déclaré à la CNIL sous le numéro 1074678, conformément à la Loi en vigueur.