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 :

Jointure pour récupéreration hors jointure


Sujet :

Requêtes MySQL

  1. #1
    Inactif  

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    3 064
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 064
    Points : 4 605
    Points
    4 605
    Par défaut Jointure pour récupéreration hors jointure
    Bonjour,

    J'ai 2 tables à dispositions avec la même structure dont une vingtaine de champs. La clef de chaque table est un Id au format chaine de caractère.

    Dans l'une des deux tables j'ai environs 1,2 millions d'enregistrements. Dans la seconde j'ai un environs 110 000 lignes.

    Je souhaite avoir en sortie 2 tables. Tout ce qui figure dans la table A mais pas dans la table B. Et inversement tout ce qui apparait dans B mais pas dans A.

    En somme existe t il une fonction comme " inner join " mais genre un "not inner join" ou dans le même acabit avec du " left join " ou " right join " ?

    Les tables finales seraient :

    - strictement dans A non commun avec B
    - strictement dans B non commun avec A

    Merci de m'aiguiller

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Théoriquement, il existe un opérateur EXCEPT qui fait le contraire de l'opérateur UNION http://sqlpro.developpez.com/cours/s...nsembles/#L3.3 Le problème, c'est que je ne suis pas sûre que ce soit supporté par MySQL.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Moi je le verrais comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT col FROM tableA WHERE id NOT IN (SELECT id FROM tableB)
    UNION
    SELECT col FROM tableB WHERE id NOT IN (SELECT id FROM tableA)
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Effectivement l'une des nombreuses limites de MySQL et de ne supporter ni EXCEPT/MINUS, ni les jointures FULL OUTER
    Du coup une requête UNION s'impose, faute de mieux

    Si vous avez la possibilité de remplacer l'identifiant char/varchar par une colonne integer, les performances seront bien meilleures

  5. #5
    Inactif  

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    3 064
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 064
    Points : 4 605
    Points
    4 605
    Par défaut
    Bonjour

    Citation Envoyé par Celira Voir le message
    Théoriquement, il existe un opérateur EXCEPT qui fait le contraire de l'opérateur UNION http://sqlpro.developpez.com/cours/s...nsembles/#L3.3 Le problème, c'est que je ne suis pas sûre que ce soit supporté par MySQL.
    J'ai déjà eu un cas avec du EXCEPT à traiter avec d'autre clause , tel que le LIKE. EXCEPT effectivement n'existe pas en mysql.

    Citation Envoyé par sabotage Voir le message
    Moi je le verrais comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT col FROM tableA WHERE id NOT IN (SELECT id FROM tableB)
    UNION
    SELECT col FROM tableB WHERE id NOT IN (SELECT id FROM tableA)
    Pour faire une requête d'union avec un " INTO OUTFILE 'lettre:\\chemindufichier\\fichier.txt' FIELDS TERMINATED BY ';'; " est ce possible de tout réceptioner dans un même fichier ?

    Citation Envoyé par escartefigue Voir le message
    Bonjour,

    Effectivement l'une des nombreuses limites de MySQL et de ne supporter ni EXCEPT/MINUS, ni les jointures FULL OUTER
    Du coup une requête UNION s'impose, faute de mieux

    Si vous avez la possibilité de remplacer l'identifiant char/varchar par une colonne integer, les performances seront bien meilleures
    Malheureusement non je n'ai pas la possibilité d'utiliser un integer.

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    3 064
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 064
    Points : 4 605
    Points
    4 605
    Par défaut
    Bonjour,

    En faisait du left join et du right join sur mes tables , j'ai filtrer sur les lignes à " null " dans les tables de résultats pour capter ce qui n'est pas commun.

    Résultat j'ai pu retrouver mes lignes non communes.

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

Discussions similaires

  1. Jointure pour récupérer 2 pseudos dans un forum
    Par bndd24 dans le forum Langage
    Réponses: 17
    Dernier message: 20/06/2016, 17h31
  2. Jointure JPA pour récupérer nom article
    Par mimi6060 dans le forum JPA
    Réponses: 1
    Dernier message: 16/05/2013, 16h25
  3. [MySQL] Problème avec les jointure pour un menu
    Par Glocman dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 31/07/2006, 17h44
  4. Problème de jointure pour affichage "speciale"
    Par webjeux dans le forum Requêtes
    Réponses: 3
    Dernier message: 22/06/2006, 12h23
  5. Table de jointure pour une seule table
    Par Louis-Guillaume Morand dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 06/10/2005, 18h49

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