Matcher les données d'un fichier et le résultat d'un SELECT

Résolu
pcsystemd Messages postés 702 Date d'inscription   Statut Membre Dernière intervention   -  
pcsystemd Messages postés 702 Date d'inscription   Statut Membre Dernière intervention   - 21 juin 2024 à 16:22

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


A voir également:

3 réponses

jee pee Messages postés 41233 Date d'inscription   Statut Modérateur Dernière intervention   9 628
 

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;

1
pcsystemd Messages postés 702 Date d'inscription   Statut Membre Dernière intervention   23
 

Merci pour cette solution que je ne manquerais pas de tester.

0
yg_be Messages postés 23537 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 581
 

bonjour,

Peux-tu, soit t'exprimer en français, soit donner un exemple plus clair?

Où veux-tu obtenir quel résultat?

0
pcsystemd Messages postés 702 Date d'inscription   Statut Membre Dernière intervention   23
 

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..
0
yg_be Messages postés 23537 Date d'inscription   Statut Contributeur Dernière intervention   1 581 > pcsystemd Messages postés 702 Date d'inscription   Statut Membre Dernière intervention  
 

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
0
yg_be Messages postés 23537 Date d'inscription   Statut Contributeur Dernière intervention   1 581 > pcsystemd Messages postés 702 Date d'inscription   Statut Membre Dernière intervention  
 

"matcher" n'est pas français.  Tu l'utilises quatre fois, avec quatre significations différentes. 

0
pcsystemd Messages postés 702 Date d'inscription   Statut Membre Dernière intervention   23
 

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


0