Intégrer une liste de valeur dans une requête

Fermé
creafter Messages postés 445 Date d'inscription mercredi 23 décembre 2009 Statut Membre Dernière intervention 30 octobre 2022 - Modifié le 30 juil. 2018 à 09:49
creafter Messages postés 445 Date d'inscription mercredi 23 décembre 2009 Statut Membre Dernière intervention 30 octobre 2022 - 30 juil. 2018 à 11:29
Bonjour,

Je recherche à transformer la requête suivante de manière à pouvoir lister les colonnes de plusieurs tables et non une seule.

SELECT table_name, column_name
FROM information_schema.columns
WHERE table_schema = 'schema'
  AND table_name   = 'table"

Le code ci dessus fonctionne

je souhaiterai pouvoir écrire quelque chose du genre :
SELECT table_name, column_name
FROM information_schema.columns
WHERE table_schema = 'schema'
  AND table_name   = select distinct tablename from tableliste

Bien-sur ce code ne fonctionne pas mais c'est pour comprendre l'idée
et ici tableliste est un table que je possède et qui reprend une liste de toutes mes tables

Auriez vous une idée ?

Je travaille sous PostGreSQL

Cordialement

3 réponses

jordane45 Messages postés 38360 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 29 décembre 2024 4 720
30 juil. 2018 à 09:38
Bonjour,

Question bête.... Ne suffirait-il pas de retirer le "AND" ?
SELECT table_name, column_name
FROM information_schema.columns
WHERE table_schema = 'schema'

0
creafter Messages postés 445 Date d'inscription mercredi 23 décembre 2009 Statut Membre Dernière intervention 30 octobre 2022 39
Modifié le 30 juil. 2018 à 10:07
"Question bête.... Ne suffirait-il pas de retirer le "AND" ? "

La question n'est pas si bête ^^ Et oui en soit ça aurait pu marcher mais je suis dans un cas un peu particulier :
Sous mon schema j'ai 266 tables mais il y en a seulement 79 dont je veux la liste.
Dans le cas ou je retirerai le AND il faudrait pouvoir filtrer les table par leur suffixe dans leur nom en effet celles qui m’intéressent commencent toutes par 'cf_nomdetable'
ça peut etre une autre piste mais je n'ai aucune idée de comment filtrer cela :s

EDIT :
Je viens de trouver il faut ecrire
SELECT table_name ,column_name
FROM information_schema.columns
WHERE table_schema = 'schema'
  AND table_name   ~~ 'cf_%'


Et dire que ça fait quelque jour que je rame pour trouver qqchose de si simple --'

Du coup je me permet d'ajouter une contrainte supplémentaire car c'est vers où je dois me diriger :
il faudrait que j'utilise les informations de cette table ou alors la compléter(qui contient je le rappel les nom d'autre table et les valeur des colonne associée) pour obtenir les valeur distinctes prises par chacunes des colonnes de chaques table.
Du style :
Select distinct 'nomdunecolonne' From 'table'

Je ne sais pas comment l'expliquer mais en gros il faudrait appliquer ce code a chaque enregistrement retourné par la précédente requete où table est le nom d'une des table trouvé grâce à la requête et nomdunecolonne est le le nom de la colonne associé
0
jordane45 Messages postés 38360 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 29 décembre 2024 4 720
30 juil. 2018 à 09:52
Dans ce cas, tu dois pouvoir utiliser un LIKE
AND table_name   LIKE 'cf_nomdetable%'


(ça fait parti des "fonctions" de base à connaitre en SQL ... LIKE , IN , NOT .. )
0
creafter Messages postés 445 Date d'inscription mercredi 23 décembre 2009 Statut Membre Dernière intervention 30 octobre 2022 39
30 juil. 2018 à 10:08
mince j'ai édité mon post en même temps que vous avez répondu ...
du coup cf : au dessus
0
creafter Messages postés 445 Date d'inscription mercredi 23 décembre 2009 Statut Membre Dernière intervention 30 octobre 2022 39
30 juil. 2018 à 11:29
Du coup pour récapituler je recherche comment mettre en place une sorte de requête itérative qui sur chaque ligne d'une table m'applique ce pattern
Select distinct 'Cn' From 'Tn'
et qui me sort des valeur Vn
Pour imager ça me crearai une sorte d'arborescence :
La table A c'est celle que j'ai pu crée avec la requête des 1ers messages et le B c'est celle que je veux en appliquant le select distinct ...



En se limitant à l'utilisation de postgresql
0