11
votes

Intersection de plusieurs tableaux dans PostgreSQL

J'ai une vue définie comme: xxx pré>

Ce que je voudrais faire est d'obtenir l'intersection des tableaux dans AGGFIELD code> avec quelque chose comme: p >

SELECT intersection(AggField) FROM View1 WHERE Field2 = 'SomeValue';


0 commentaires

3 Réponses :


19
votes

La chose la plus proche d'une intersection de matrice que je peux penser, c'est que:

> select * from stuff;
    a    
---------
 {1,2,3}
 {1,2,3}
 {3,4,5}
(3 rows)

> select array_intersect_agg(a) from stuff;
 array_intersect_agg 
---------------------
 {3}
(1 row)


6 commentaires

sur Postgres 9.1 La fonction AGG doit être comme "" "Créer un agrégat array_intersect_agg (integer []) (sfunc = array_intersect, stype = int4 []);" "


@Rescommunes: La version 9.1 est-elle ajoutée correcte? Je n'ai pas de 9,1 pratiques pour le tester moi-même.


Oui c'est bon. En outre, je ne sais pas si 9.1+ est l'endroit où la différence est ou non (pourrait être plus tôt).


Alternativement: installer l'extension intarray qui fournit un opérateur d'intersection ( & )


Qu'est-ce que DT (E)?


@smaiakov c'est un alias pour la table dérivée de sorte que la requête sache qu'une "table" nommée dt fait référence à ce que le syndicat et que c'est "colonne" est nommé E .



0
votes

La réponse acceptée n'a pas fonctionné pour moi. C'est comme ça que je l'ai réparé. XXX


0 commentaires

0
votes

Il est un peu tardif de répondre à cette question, mais peut-être que quelqu'un en aurai besoin, alors j'ai décidé de partager quelque chose que j'ai écrit cause n'a pas trouvé de solution prête pour l'intersection d'un nombre de tableaux. Alors voici ici. Cette fonction reçoit une matrice de matrices, s'il s'agit uniquement d'une seule matrice, la fonction renvoie une première matrice, s'il y a 2 tableaux de réseaux de fonctionnement 2 tableaux et renvoie le résultat, s'il s'agit de 2 matrices, la fonction prend une intersection de 2 premiers tableaux, le stocke Dans certaines variables et boucles à travers tous les autres tableaux, intersect chaque ensemble suivant avec des résultats stockés et des magasins entraîne une variable. Si le résultat est null, il existe avec NULL. Dans la variable et la variable qui stocke une matrice avec des données interagites renvoyées de la fonction. xxx

Voici le code pour valider les travaux. xxx


0 commentaires