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

Requêtes MySQL Discussion :

requete avec jointure comparaison de 2 tables


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2007
    Messages : 60
    Points : 61
    Points
    61
    Par défaut requete avec jointure comparaison de 2 tables
    bonjour à tous et à toutes

    je travaille sur un projet qui doit en autre comparer 2 fichiers excel de même structure . Pour cela j'ai injecté chaque fichiers excel dans une table de ma base de donnée. La structure de la table est:

    nom_naissance, nom usuel, prenom, identifiant,date_naissance, sexe, date_entree, date sortie, nom du fichier

    l'identifiant est un numero unique mais qui apparait en doublon car une personne entre et sort plusieurs fois.

    je dois trouver les differences entre les 2 fichiers

    j'ai essayé par une jointure du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT 't1' as t1, nom_naissance, nom usuel, prenom, identifiant,date_naissance, sexe, date_entree, date sortie, nom du fichier 
    FROM t1 as t1
    UNION ALL
    SELECT 't2' as t2, nom_naissance, nom usuel, prenom, identifiant,date_naissance, sexe, date_entree, date sortie, nom du fichier
    FROM t2 as t2
    )t
    GROUP BY nom_naissance, nom usuel, prenom, identifiant,date_naissance, sexe, date_entree, date sortie, 
    HAVING count( * ) =1")
    mais cela me donne toutes les combinaison, j'aimerai comparer par couple d'entree sortie

    merci pour votre aide

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,


    donnez des exemple de données en entrée / sortie.

    La c'est pas compréhensible.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2007
    Messages : 60
    Points : 61
    Points
    61
    Par défaut
    merci pour ta réponse voici un exemple exemplebase.xlsx je cherche a trouver les erreurs suivantes:

    les 2 R pour corto maltese
    le castafiole au lieu du castafiore
    l'erreur de date du fin de sejour 03 au lieu du 02

    voila est ce plus comprehensible,
    merci de l'aide

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    c'est la table 1 ou la table 2 qui est référente ?

    Quelles sont les colonnes que vous voullez comparer mis à part le nom / prénom ?

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2007
    Messages : 60
    Points : 61
    Points
    61
    Par défaut
    c'est la table 1, en fait je dois verifier si les noms, prenom et date de naissance sont identiques dans chaque table et si chaque visite (entree; sortie) d'une personne est identique dans chaque table, dans l'exemple si la seconde visite de corto maltese (table 1 est bien egale à la seconde visite de corto maltese table 2).

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2007
    Messages : 60
    Points : 61
    Points
    61
    Par défaut
    merci pour le lien si j'ai bien compris il faut faire une requete pour voir si les noms sont identique et une sous requetes pour les dates est cela? je vais essayer de réaliser ma requete et je donne des nouvelles

  8. #8
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2007
    Messages : 60
    Points : 61
    Points
    61
    Par défaut
    bonjour,

    j'ai fait quelques test hier, je redecouvre le sql et j'ai unpeu de mal a tout ressaisir, s'il te plait peux tu m'aider avec la clause where no exist, comme j'avais du mal j'ai fait des recherches tant bien que mal j'ai essaye d'adaper ma requete et j'ai testé cela:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT DISTINCT table1.* 
    FROM table1, table2 
    WHERE  table1.identifiant Not In (SELECT table1.identifiant FROM table1, table2 WHERE  table1.nom_usuel = table2.nom_usuel AND  table1.nom_naissance = table2.nom_naissance AND  table1.prenom =   table2.prenom AND   table1.date_naissance =   table2.date_naissance AND  table1.sexe =    table2.sexe and table1.debut_sej =    table2.debut_sej and table1.fin_sej =    table2.fin_sej ) 
    UNION ( 
    SELECT DISTINCT table2.* 
    FROM table1, table2 
    WHERE table2.identifiant Not In (SELECT table2.identifiant  FROM table1, table2   WHERE table1.nom_usuel = table2.nom_usuel AND  table1.nom_naissance = table2.nom_naissance AND  table1.prenom =   table2.prenom AND   table1.date_naissance =   table2.date_naissance AND  table1.sexe =    table2.sexe and table1.debut_sej =    table2.debut_sej and table1.fin_sej =    table2.fin_sej )
    ) order by nom_naissance
    cela me donne toutes les combinaisons possibles, et j'ai bien compris qu'il faut mettre la clause no exist, peux tu m'aider à adapter cela

    merci

  9. #9
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    350
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 350
    Points : 507
    Points
    507
    Par défaut
    Le lien de punkoff est pourtant assez clair mais bon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT DISTINCT nom_naissance, nom usuel, prenom, identifiant,date_naissance, sexe, date_entree, date_sortie 
    FROM table1
    WHERE  NOT EXISTS (SELECT DISTINCT nom_naissance, nom usuel, prenom, identifiant,date_naissance, sexe, date_entree, date_sortie  FROM table2) 
    ORDER BY nom_naissance
    Avec ça tu auras tout les éléments de la table1 qui n'ont pas de correspondance sur les champs sélectionnés dans la table2.
    Marcuscircus : La seule différence entre un rêve et sa réalisation, c'est l'envie

  10. #10
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2007
    Messages : 60
    Points : 61
    Points
    61
    Par défaut
    merci pour ta reponse mais cela me donne un resultat vide, ne dois je pas faire une jointure entre les deux table car je souhaite comparer les champs des 2 tables puis indiquer les differences
    merci

  11. #11
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    350
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 350
    Points : 507
    Points
    507
    Par défaut
    Cette requête te donnes les lignes "nom_naissance, nom usuel, prenom, identifiant,date_naissance, sexe, date_entree, date_sortie" de la table1 qui n'ont pas de correspondance dans la table 2.

    Et pour information une jointure ne se fait pas en rajoutant simplement le nom de la table dans le from.
    Marcuscircus : La seule différence entre un rêve et sa réalisation, c'est l'envie

  12. #12
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par marcuscircus Voir le message
    Cette requête te donnes les lignes[...]qui n'ont pas de correspondance dans la table 2.
    Non, cette requête ressort toutes les lignes de la table1... quand il n'y a aucune ligne dans table2


    Le problème avec un NOT EXISTS (tout comme avec une jointure externe avec vérification des nulls pour la table2) c'est que s'il y a des colonnes à NULL, ça ne fonctionnera pas, à moins de traiter le cas spécifiquement pour toutes les colonnes nullable, ce qui est assez lourd !

    Le plus simple serait un EXCEPT qui n'est malheureusement pas pris en charge par MySQL

    Une solution est donc de le simuler comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT DISTINCT nom_naissance, nom usuel, prenom, identifiant,date_naissance, sexe, date_entree, date_sortie 
    FROM table1
    WHERE (nom_naissance, nom usuel, prenom, identifiant,date_naissance, sexe, date_entree, date_sortie) NOT IN (
        SELECT DISTINCT nom_naissance, nom usuel, prenom, identifiant,date_naissance, sexe, date_entree, date_sortie
        FROM table2
    )

  13. #13
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2007
    Messages : 60
    Points : 61
    Points
    61
    Par défaut
    merci pour ta reponse, si je comprends bien il faut que je fasse 2 requetes

    de la table 1 vers la table 2
    de la table 2 vers la table 1

    afin de voir les differences entre les deux tables, mon but est d'harmoniser les deux tables, et il se peut qu'il y ai des nom en table 1 qui ne sont pas en table 2 et vice versa

    je teste et je tiens au courant merci pour l'aide

  14. #14
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Il suffit de faire un UNION ALL avec la même requête où on a juste inversé les tables

  15. #15
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2007
    Messages : 60
    Points : 61
    Points
    61
    Par défaut
    merci beaucoup cela répond parfaitement à ce que je recherchais

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requete avec jointure sur la même table
    Par CaptainChoc dans le forum Langage SQL
    Réponses: 3
    Dernier message: 21/04/2009, 12h30
  2. recherche aide pour requete avec jointure
    Par nebil dans le forum Requêtes
    Réponses: 5
    Dernier message: 21/08/2006, 17h03
  3. [MySQL] Erreur dans une requête avec jointures
    Par bobic dans le forum Langage SQL
    Réponses: 17
    Dernier message: 03/08/2006, 13h04
  4. [Access] Requête avec LEFT JOIN et 3 tables
    Par estelledany dans le forum Langage SQL
    Réponses: 1
    Dernier message: 07/06/2006, 13h27
  5. requete avec jointure & group by
    Par de LANFRANCHI dans le forum Langage SQL
    Réponses: 9
    Dernier message: 27/07/2004, 14h31

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