IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Comparaisons entre adresses email ne matchent pas


Sujet :

Langage SQL

  1. #1
    Membre du Club Avatar de Freeluvs
    Profil pro
    Inscrit en
    Février 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Février 2009
    Messages : 78
    Points : 57
    Points
    57
    Par défaut Comparaisons entre adresses email ne matchent pas
    Bonjour,

    J'ai un problème de comparaisons d'adresses email en SQL (sur une base MySQL).
    Dans ma base, j'ai deux tables qui listent des utilisateurs.

    TABLE1(Id, Nom, Prenom, Email, ...)
    TABLE2(Email, Nom, Prenom)

    Ces deux tables contiennent des utilisateurs en communs (inscrits donc dans les deux tables avec les même noms, prénoms et emails). Je veux faire un rapprochement entre ces deux tables, c'est à dire trouver les gens qui sont présents dans les deux.

    Quand je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT t1.Id 
    FROM TABLE1 t1, TABLE2 t2 
    WHERE t1.Nom = t2.Nom 
    AND t1.Prenom = t2.Prenom;
    J'obtiens le résultat que je veux, à savoir la liste des personnes en commun dans les deux tables. Pourtant ces tables contiennent bien des utilisateurs avec des adresses email commune dans les deux tables.
    Et je sais pas si ça peu jouer, mais les deux tables ont le même encodage de caractère.

    Mais quand je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT t1.Id 
    FROM TABLE1 t1, TABLE2 t2 
    WHERE t1.Email = t2.Email;
    Je n'obtiens rien du tout.
    Quelqu'un pourrait m'expliquer pourquoi cette comparaison entre adresses email ne fonctionne pas ?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 099
    Points : 28 407
    Points
    28 407
    Par défaut
    Est-ce que les deux colonnes email ont le même type ?
    N'y aurait-il pas des espaces dans certaines adresses ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    ou une casse différente entre les 2 adresses ....

    et pourquoi ne pas utiliser une jointure ?
    Merci d'ajouter un sur les tags qui vous ont aidé

  4. #4
    Membre du Club Avatar de Freeluvs
    Profil pro
    Inscrit en
    Février 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Février 2009
    Messages : 78
    Points : 57
    Points
    57
    Par défaut
    Bonjour, et merci pour vos réponses.
    Au niveau du type ils sont pareil, c'est du varchar, tout deux avec la meme taille. Et en regardant le contenu de la table, je n'ai pas d'espace dans les adresses emails, j'en ai des identiques à 100%.

    Et Olivier, j'ai essayé avec une jointure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select m.IdMembre 
    from mem_membre m JOIN mem_bureau b ON m.Email = b.Email;
    Mais toujours aucun résultat :-(

  5. #5
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    peux tu envoyer un jeu de données (en précisant le SGBD) ?


    NB : la jointure n'aurait rien changé au résultat, mais c'est plus "joli"
    Merci d'ajouter un sur les tags qui vous ont aidé

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 848
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 848
    Points : 52 964
    Points
    52 964
    Billets dans le blog
    6
    Par défaut
    La collation des 2 colonnes est-elle identique ?

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  7. #7
    Membre du Club Avatar de Freeluvs
    Profil pro
    Inscrit en
    Février 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Février 2009
    Messages : 78
    Points : 57
    Points
    57
    Par défaut
    @olivier: ces tables contenants des adresses emails persos, je ne peux pas trop me permettre de te fournir un jeu d'essai avec des vrais emails présents dans ma base.

    @SQLpro je ne sais pas ce qu'est la collation de deux tables, désolé. C'est le p'tit verre de vinasse qu'ils prennent avant le repas?

    Par contre je viens de tomber sur un truc intéréssant: quand je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT truc 
    FROM TABLE1 
    WHERE Email = 'freeluvs@mail.com'
    je bien le tuple que je veux. Par contre quand je fais la même chose sur la TABLE2 qui contient lui aussi cette adresse email, je n'obtient rien. Enfait, mes recherche dans ma 2nd table ne fonctionne pas.

    La structure des tables (Le SGBD c'est MySQL):
    TABLE1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    CREATE TABLE IF NOT EXISTS `TABLE1` (
      `IdMembre` int(11) NOT NULL AUTO_INCREMENT,
      ...
      `Email` varchar(80) NOT NULL,
      ...
      PRIMARY KEY (`IdMembre`),
      UNIQUE KEY `idx_mem_membre2` (`Email`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=295 ;
     
    INSERT INTO `mem_membre` (`IdMembre`, ...) VALUES
    (1,..., 'freeluvs@mail.com', ...);
    TABLE2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE IF NOT EXISTS `TABLE2` (
     `Email` varchar(80) NOT NULL DEFAULT '',
      `Prenom` varchar(50) NOT NULL,
      `Nom` varchar(80) NOT NULL,
      PRIMARY KEY (`Email`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
     
    INSERT INTO `mem_bureau` (`Email`, `Prenom`, `Nom`) VALUES
    ('freeluvs@mail.com','Free', 'Luvs');

  8. #8
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    @olivier: ces tables contenants des adresses emails persos, je ne peux pas trop me permettre de te fournir un jeu d'essai avec des vrais emails présents dans ma base.
    c'est vrai, je n'y avais pas pensé

    Par contre quand je fais la même chose sur la TABLE2 qui contient lui aussi cette adresse email, je n'obtient rien. Enfait, mes recherche dans ma 2nd table ne fonctionne pas.
    En es tu vraiment sûr ? (en général, c'est plus souvent une erreur humaine, qu'un bug du SGBD )

    Essaye avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WHERE 
       UPPER(TRIM(Email)  COLLATE Fr_Fr_Ci_Ai) = UPPER(TRIM('freeluvs@mail.com')  COLLATE Fr_Fr_Ci_Ai)
    sous FIREBIRD pour la collation
    Merci d'ajouter un sur les tags qui vous ont aidé

  9. #9
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 046
    Points
    34 046
    Billets dans le blog
    14
    Par défaut
    Par contre quand je fais la même chose sur la TABLE2 qui contient lui aussi cette adresse email, je n'obtient rien. Enfait, mes recherche dans ma 2nd table ne fonctionne pas.
    Essaie successivement avec des LIKE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT truc 
    FROM TABLE1 
    WHERE Email LIKE '%freeluvs@mail.com%'
    => Permet de voir si au moins le texte de l'adresse existe.

    Si la première requête donne un résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT truc 
    FROM TABLE1 
    WHERE Email LIKE '%freeluvs@mail.com'
    => Permet de voir s'il y a un espace ou caractère non visible avant le texte de l'adresse.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT truc 
    FROM TABLE1 
    WHERE Email LIKE 'freeluvs@mail.com%'
    => Permet de voir s'il y a un espace ou caractère non visible après le texte de l'adresse.

    Ensuite, tu peux faire une requête UPDATE avec TRIM pour virer ce qu'il y a en trop.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  10. #10
    Membre du Club Avatar de matching_ds
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 40
    Points : 42
    Points
    42
    Par défaut
    j'ai déjà rencontré ce genre de problème et je l'ai toujours résolu en faisant un TRIM (UPPER(champs_table1))=TRIM (UPPER(champs_table2))

    ça devrais marcher

    ***c'est en forgeant qu'on devient forgeron***

Discussions similaires

  1. [Débutant] Comment recuperer adresse email entre <>
    Par mikey83 dans le forum VB.NET
    Réponses: 3
    Dernier message: 23/11/2013, 10h32
  2. Réponses: 1
    Dernier message: 24/01/2008, 09h13
  3. Réponses: 6
    Dernier message: 22/05/2007, 09h55
  4. Réponses: 6
    Dernier message: 18/04/2006, 13h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo