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 :

Problème de jointure avec INNER JOIN et LEFT OUTER JOIN


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 96
    Points : 78
    Points
    78
    Par défaut Problème de jointure avec INNER JOIN et LEFT OUTER JOIN
    Bonjour,

    En passant mon site chez mon hébergeur , j'ai remarqué que leur version de mysql n'était pas la même que celle de mon easyphp et j'ai un petit problème dans la réécriture d'une requete.

    Voila l'ancienne requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT bons_dossiers.siren, solde_total, solde_sp, solde_art40, `procedure`, envoi_huissier, montant, annee_echeance, prets_echus, prets_non_echus 
    FROM bons_dossiers, gestion_prets_non_echus 
    WHERE bons_dossiers.siren=gestion_prets_non_echus.siren 
    AND bons_dossiers.organisme=gestion_prets_non_echus.organisme
    AND bons_dossiers_organisme = 'org'
    AND bons_dossiers.archivage = 'Faux'
    AND `procedure` <> 'rien'
    AND bons_dossiers.siren NOT IN (
                                       SELECT siren from gestion_reprise 
                                        WHERE date_envoi_mandataire <> '0000-00-00')
    Le résultat auquel je suis arrivé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT bons_dossiers.siren, solde_total, solde_sp, solde_art40, `procedure` , envoi_huissier, montant, annee_echeance, prets_echus, prets_non_echus
    FROM gestion_prets_non_echus 
    INNER JOIN bons_dossiers ON bons_dossiers.organisme = gestion_prets_non_echus.organisme
    AND bons_dossiers.siren = gestion_prets_non_echus.siren
    LEFT JOIN gestion_reprise
    USING ( siren ) 
    WHERE (
    gestion_reprise.date_envoi_mandataire = '0000-00-00'
    OR gestion_reprise.siren IS NULL 
    )
    AND bons_dossiers.organisme = 'org'
    AND bons_dossiers.archivage = 'Faux'
    AND `procedure` <> 'rien'
    Problème la deuxième requête ne me renvoie pas le bon resultat.

    clef des tables:
    bons_dossiers : siren, organisme
    gestion_reprise : siren
    gestion_prets_non_echus: siren, organisme, annee


    les relations entre les tables sont :
    bons_dossiers et gestion_prets_non_echus sur siren et organisme
    gestion_reprise et bons_dossiers sur siren


    Voila pour mon problème si quelqu'un voit ou est l'erreur dans la deuxième requête, merci de m'éclairer

  2. #2
    Rédacteur
    Avatar de cladsam
    Profil pro
    Inscrit en
    Août 2003
    Messages
    1 785
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2003
    Messages : 1 785
    Points : 2 436
    Points
    2 436
    Par défaut
    question comme ça, comment tu peux avoir des resultat pour la condition:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gestion_reprise.siren IS NULL

    si siren est la clef primaire de gestion_reprise... t'es sur qu'a cet endroit tu devait pas mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gestion_reprise.date_envoi_mandataire IS NULL
    ( ca je le dis au pif sans avoir regardé plus avant les détails de la requete c'est peut-etre une énorme anerie)
    Chef de Projet SAP. Certifié Prince2 Practitioner
    ---------------------------------------------------
    Anakin Skywalker turned to the Dark Side after his failed attempt to upgrade R/2-D2 to R/3-D2.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 96
    Points : 78
    Points
    78
    Par défaut
    Tout les siren présent dans la table gestion.reprise ne le sont pas dans bons_dossiers.

    En fait ce que je veux c'est la jointure de la table bons_dossiers avec la table gestion_prets_non_echus en enlevant les enregistrements qui sont dans la table gestion_reprise avec une date_envoi_mandataire différente de 0000-00-00

    Voila dites moi si ce n'est pas encore clair

  4. #4
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Est-ce qu'un SIREN peut apparaître plusieurs fois dans la table gestion_reprise avec des date_envoi_mandataire différentes ? Si oui ton problème vient sans doute de là.
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 96
    Points : 78
    Points
    78
    Par défaut
    La réponse est non étant étant donné que siren est la clé de gestion_reprise.
    En fait cladsam a raison ca marche avec sa proposition mais je vois pas pourquoi ca marchait pas avec ce que j avais mis avant. Donc voila la solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT bons_dossiers.siren, solde_total, solde_sp, solde_art40, `procedure` , envoi_huissier, montant, annee_echeance, prets_echus, prets_non_echus 
    FROM gestion_prets_non_echus 
    INNER JOIN bons_dossiers ON bons_dossiers.organisme = gestion_prets_non_echus.organisme 
    AND bons_dossiers.siren = gestion_prets_non_echus.siren 
    LEFT JOIN gestion_reprise 
    USING ( siren ) 
    WHERE (
    gestion_reprise.date_envoi_mandataire = '0000-00-00' 
    OR date_envoi_mandataire IS NULL )
    AND bons_dossiers.organisme = 'org' 
    AND bons_dossiers.archivage = 'Faux' 
    AND `procedure` <> 'rien'
    merci à ceux qui ont répondu je passe le topic en résolu

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

Discussions similaires

  1. LEFT OUTER JOIN et LEFT JOIN
    Par polace dans le forum MySQL
    Réponses: 3
    Dernier message: 19/11/2008, 15h24
  2. Problème de left outer join avec Ibatis
    Par sarsipius dans le forum JDBC
    Réponses: 1
    Dernier message: 28/02/2008, 14h51
  3. LEFT JOIN ou LEFT OUTER JOIN
    Par maysa dans le forum Langage SQL
    Réponses: 2
    Dernier message: 23/05/2007, 10h20
  4. Problème avec left outer join
    Par jgfa9 dans le forum Requêtes
    Réponses: 1
    Dernier message: 22/08/2005, 21h07
  5. Problème de performance avec LEFT OUTER JOIN
    Par jgfa9 dans le forum Requêtes
    Réponses: 6
    Dernier message: 17/07/2005, 13h17

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