Matcher les données d'un fichier et le résultat d'un SELECT
Résolupcsystemd Messages postés 702 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai un fichier Excel avec des emails dans la colonne 1 que je dois matcher avec les emails que j'ai en BDD dans la seconde colonne. Comment dois je m'y prendre?
Fichier Excel d'emails :
Colonne 1 | Colonne 2 toto@mail.com titi@jotest.fr tata@mailing.net etc..
J'ai essayé de faire cela
select DISTINCT mail from matable where email in('toto@mail.com','titi@jotest.fr','tata@mailing.net');
Le problème c'est que dans mon fichier Excel j'en ai plus de 500 et que j'ai comme résultat de mon SELECT que 259 emails qui sont matches et du coup je ne vois pas comment les matcher dans la seconde colonne de mon fichier Excel!
Peut être puis je le faire avec une requête plus complexe ou un script bash, Awk, etc..
Une idée?
Merci d'avance
- Matcher les données d'un fichier et le résultat d'un SELECT
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier bin - Guide
- Fichier rar - Guide
- Ouvrir un fichier .dat - Guide
3 réponses
Bonjour,
Depuis Excel on doit pouvoir accéder à la BDD. Autrefois je faisais cela avec une base Oracle via je crois ODBC.
Aujourd'hui dans Excel sur Données/Obtenir des données/A partir d'une BDD/BDD PostGreSQL on semble pouvoir paramétrer une connexion à la BDD.
Postgresql ayant une fonction de chargement de fichier plat, tu enregistres ton fichier excel en .csv et exécutes quelque chose comme :
create table mailcsv(mail1 text, mail2 text); copy mailcsv from 'mail.csv' (format csv, delimiter ';'); select mail1, email from mailcsv left join matable on mail1=email;
bonjour,
Peux-tu, soit t'exprimer en français, soit donner un exemple plus clair?
Où veux-tu obtenir quel résultat?
Bonjour,
C'est du français mais je te l'accorde pas simple a expliquer a l'écrit!
Si non en exemple, et bien tu as le format du fichier dans mon premier post et pour chaque email je dois regarder s'il existe en bdd et mettre dans la colonne 2 yes ou no donc en gros avoir le résultat suivant :
Colonne 1 | Colonne 2 toto@mail.com | yes titi@jotest.fr | yes tata@mailing.net | no etc..
Ah bon, tu veux indiquer dans la deuxième colonne si le texte dans la première colonne est présent, ou pas, dans la base de données.
Moi je copierais la première colonne dans une nouvelle table de la base de données.
Je ferais ensuite une requête sur la base de données, cette requête me renvoyant le résultat attendu.
SELECT m1.email , iif(m2.email=m1.email,"yes","no") from m1 left join m2 on m1.email=m2.email
Bon j'ai trouvé mais s'il y a plus simple ou plus propre je prends!
Je transforme le fichier Excel en CSV avec séparateur pipe puis j’exécute dans VI une commande SED afin de générer pour chaque email une ligne de SELECT que je joue dans postgresql et le fichier de résultats je le nettoie avec une commande GREP
Merci pour cette solution que je ne manquerais pas de tester.