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

Résolu
pcsystemd Messages postés 702 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 6 novembre 2024 - Modifié le 28 mai 2024 à 10:53
pcsystemd Messages postés 702 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 6 novembre 2024 - 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 40504 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 30 novembre 2024 9 438
Modifié le 28 mai 2024 à 12:23

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 dimanche 27 novembre 2005 Statut Membre Dernière intervention 6 novembre 2024 23
21 juin 2024 à 16:22

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

0
yg_be Messages postés 23361 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 novembre 2024 Ambassadeur 1 556
28 mai 2024 à 11:48

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 dimanche 27 novembre 2005 Statut Membre Dernière intervention 6 novembre 2024 23
28 mai 2024 à 12:27

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 23361 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 novembre 2024 1 556 > pcsystemd Messages postés 702 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 6 novembre 2024
Modifié le 28 mai 2024 à 15:12

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 23361 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 novembre 2024 1 556 > pcsystemd Messages postés 702 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 6 novembre 2024
28 mai 2024 à 15:15

"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 dimanche 27 novembre 2005 Statut Membre Dernière intervention 6 novembre 2024 23
28 mai 2024 à 12:21

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