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 :

LEFT JOIN exclusion


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Par défaut LEFT JOIN exclusion
    Bonjour j'ai deux tables sous MySql contenant toutes les deux les champs

    plaque,dr,nra,nom_nra

    et j'aimerais pouvoir extraire à l'aire d'une requête les lignes ou ce couple de champs est présent ds une des tables et pas ds l'autre.

    je pense que c'est avec une jointure externe LEFT JOIN qu'il faut faire cela ms je ne m'en sors pas

    si quelqu'un peut m'aider

    Merci

  2. #2
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Saluton,
    En fait il te faut faire deux requêtes en jointures et mettre les deux requêtes en UNION, quelque chose comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT t1.plaque,t1.dr,t1.nra,t1.nom_nra,'t1' as source
    FROM table1 t1
    LEFT JOIN table2 t2 ON CONCAT(t1.plaque,t1.dr,t1.nra,t1.nom_nra)=CONCAT(t2.plaque,t2.dr,t2.nra,t2.nom_nra)
    WHERE CONCAT(t2.plaque,t2.dr,t2.nra,t2.nom_nra) IS NULL
    UNION
    SELECT t3.plaque,t3.dr,t3.nra,t3.nom_nra,'t2' as source
    FROM table2 t3
    LEFT JOIN table1 t4 ON CONCAT(t3.plaque,t3.dr,t3.nra,t3.nom_nra)=CONCAT(t42.plaque,t4.dr,t4.nra,t4.nom_nra)
    WHERE CONCAT(t4.plaque,t4.dr,t4.nra,t4.nom_nra) IS NULL
    la requête peut être plus simple si la jointure peut se faire sur une seule colonne et non les 4
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Par défaut
    mci de ta reponse j'ai réussi a faire ça ntre temps qui me retourne le bon résultat c'est valide aussi?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT distinct c.plaque,c.dr,c.nra,c.dslam FROM carte_test c left join tampon_equipable_equipe_dslam t
    on c.plaque=t.plaque and c.dr=t.dr and c.nra=t.nra and c.dslam=t.dslam where t.dslam is null;
    et l'inverse pour avoir sur l'autre table j'imagine en combinant en union comme la tienne ça marchera laquelle est préferable la tienne ou la mienne?

  4. #4
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Ne sachant pas si certaines colonnes peuvent être nativement NULL dans la table, j'ai préféré tester la NULLité d'ensemble des colonnes de la table en jointure.
    Mais l'idéal serait de faire la jointure sur une ID commune.
    Ce qui est plus performant entre tester l'égalité de deux CONCAT ou quatre égalités de colonnes, je n'en sais rien, c'était plus vite écrit avec CONCAT, d'où mon choix de feignasse du clavier.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Par défaut
    d'accord je testerais les 2 possibilites à l'occasion encore merci

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

Discussions similaires

  1. count() dans *plusieurs* LEFT JOIN
    Par silver_dragoon dans le forum Langage SQL
    Réponses: 2
    Dernier message: 28/06/2004, 17h20
  2. LEFT JOIN avec Oracle 8i ne va pas... doit utiliser (+)
    Par loikiloik dans le forum Langage SQL
    Réponses: 10
    Dernier message: 21/04/2004, 16h38
  3. Interbase et left join
    Par Zog dans le forum Bases de données
    Réponses: 4
    Dernier message: 23/03/2004, 08h55
  4. Non coincident MySQL (Left Join)
    Par Remiguel dans le forum Requêtes
    Réponses: 6
    Dernier message: 03/11/2003, 21h25
  5. Export d'une vue avec LEFT JOIN
    Par schnourf dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 22/05/2003, 13h57

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