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 :

Pb requête imbriquée


Sujet :

Requêtes MySQL

  1. #1
    Membre habitué Avatar de ddams
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2002
    Messages : 147
    Points : 148
    Points
    148
    Par défaut [Résolu]Pb requête imbriquée
    Sachant que les requêtes imbriquées ne sont encore pas supportées par MySql, j'ai cherché un solution pour contourner le problème.

    En cherchant dans les messages, je suis tombé là dessus :
    http://www.developpez.net/forums/viewtopic.php?t=13083
    mais je n'arrive pas à l'adapter à mon problème.

    Voici le MLD de ma base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CRM(CRM_No, CRM_Lib,...)
    Porter(#CRM_No,#Pays_Code)
    Pays(Pays_code, Pays_Nom)
    Je cherche à adapter cette requête pour qu'elle fonctionne sur MySql :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT Pays_Nom
    FROM Pays
    WHERE Pays_Code NOT IN (SELECT Pays_code
                                             FROM Porter
                                             WHERE CRM_No=1)
    En gros, je veux la liste des pays qui ne sont pas déjà liés au CRM N°1.

    Merci d'avance pour vos réponses

    @+ddams
    @+ddams

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    SELECT table1.*
    FROM table1
    LEFT JOIN table2 ON table1.id=table2.id
    WHERE table2.id IS NULL;

    De mémoire, je pense que c'est ça.

  3. #3
    Membre habitué Avatar de ddams
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2002
    Messages : 147
    Points : 148
    Points
    148
    Par défaut
    merci chunly,

    j'ai fais pas mal d'essais mais je n'obtient pas le bon résultat!

    @+ddams
    @+ddams

  4. #4
    Membre habitué Avatar de ddams
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2002
    Messages : 147
    Points : 148
    Points
    148
    Par défaut
    Chunly, avec ta solution j'ai la liste des pays qui ne sont pas dans la table porter. Moi je veux les pays, qui ne sont pas dans la table porter pour le CRM N°1.

    NB : rajouter
    AND table2.id is null OR table2.id<>1
    ne colle pas non plus!!
    @+ddams

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2002
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 13
    Points : 12
    Points
    12
    Par défaut
    Ca tombe bien, je venais justement sur ce forum pour poser la même question pour une base à moi (pas le temps d'attendre la sortie de MySQL 4.1 pour faire marcher ce truc).

    Sur l'aide de MySQL, ils donnent aussi la solution de chunly, et disent que pour des requètes plus compliquées il faut utiliser une table temporaire.

    Vu l'heure, j'ai pas trop envie de chercher comment faire marcher ça maintenant, si t'as un peu de temps dans la matinée et que tu y arrives, c'est cool, sinon je chercherai ça demain soir et en cas de succès je reposterai ici.

    A vu de nez, il doit falloir faire un truc du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE TEMPORARY TABLE tmptable &#40;INT Pays_Code&#41;;
    INSERT INTO tmptable SELECT Pays_Code from Porter where CRM_No=1;
    SELECT Pays_Nom FROM Pays LEFT JOIN Porter ON &#40;Pays.Pays_Code=Porter.Pays_Code&#41; WHERE Porter.Pays_Code IS NULL;
    DROP TABLE tmptable;
    Et on devrait récupérer ce que l'on veut avec le select...
    A tester et à compléter bien entendu...

    A Bientôt

    Loïc

  6. #6
    Membre éclairé

    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    412
    Détails du profil
    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2002
    Messages : 412
    Points : 657
    Points
    657
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Pays_Nom 
    FROM Pays LEFT JOIN Porter ON Pays.Pays_Code = Porter.Pays_code AND Porter.CRM_No=1
    WHERE Porter.Pays_Code is null;
    bonne nuit...

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Salut,

    Dans ce cas, il te suffit de mettrede rajouter "WHERE CRM_No=1", non ?

  8. #8
    Membre éclairé

    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    412
    Détails du profil
    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2002
    Messages : 412
    Points : 657
    Points
    657
    Par défaut
    non car la clause where travaille sur l'ensemble de données de la clause from déjà évaluée. Et si on fixe la condition (Porter.Pays_Code is null), alors les lignes qui restent ont toutes les champs Porter.* à null aussi.

  9. #9
    Membre à l'essai
    Inscrit en
    Juin 2002
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 13
    Points : 12
    Points
    12
    Par défaut
    Intense respect à toi, laffreuxthomas, ça marche nickel.

    Merci

  10. #10
    Membre habitué Avatar de ddams
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2002
    Messages : 147
    Points : 148
    Points
    148
    Par défaut
    merci beaucoup pour toutes vos réponses et spécialement à laffreuxthomas pour avoir troucer la bonne solution qui marche du feu de dieu !!

    @+ddams
    @+ddams

  11. #11
    Leoxp
    Invité(e)
    Par défaut Woupi !!
    Merci beaucoup ! Je cherchais la même réponse sur le forum et grâce à vous j'ai pu résoudre le même problème de requête imbriqué sur lequel je bossais depuis plusieurs jours !

    Merci beaucoup !!

  12. #12
    Candidat au Club
    Inscrit en
    Avril 2004
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Bonjour,
    bien j'ai beau lire la solution j'arrive pas à l'adapter ac ma requete
    au niveau du from. Dsl
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     FROM Pays LEFT JOIN Porter ON Pays.Pays_Code = Porter.Pays_code AND Porter.CRM_No=1 
    WHERE Porter.Pays_Code is null;
    Donc voila mon code en version simplifié pr eviter de décourager les gens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT NUM_ETAB, LIB_SIGLE , NOM_ETAB, ADR_ETAB, CP_ETAB, LIB_CANTON, TEL_ETAB, FAX_ETAB, CIVILITE, NOM_PERSONNE
    from etablissement, sigle, commune, canton, chef_etablissement
    JOINTURE
    and NOM_ETAB like '%$etablissement%'
    LIB_CANTON like '%$ville_etab%'
    and LIB_SIGLE like '%$type_etab%'
    and etablissement.NUM_ETAB in &#40;select etablissement.NUM_ETAB
                                                    from etablissement, sigle, commune, canton, chef_etablissement
                                                    JOINTURE						or etablissement.NUM_ETAB like '%$cle_etab'&#41;
                                                    ect... avec tous les champs&#41;
    Et voila le shéma relationnel

    ETABLISSEMENT (champs étab..., Num_sigle# , Id_personne#, Code_commune#)
    CHEF_ETABLISSEMENT (champs chef etab...)
    SIGLE (champs sigle...)
    COMMUNE (champs commune..., Code_Canton# )
    CANTON (champs cantons)

    Donc voila si quelqu'un pouvait me dire ce qui faut écrire au niveau du from ce serai sympa merci

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

Discussions similaires

  1. Pb de COUNT et GROUP BY simple mais sans requête imbriquées
    Par vanquish dans le forum Langage SQL
    Réponses: 3
    Dernier message: 22/10/2004, 10h45
  2. [Requête] Faire une requête imbriquée?
    Par sekiryou dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/01/2004, 23h52
  3. problème avec une requête imbriquée
    Par jaimepasteevy dans le forum Langage SQL
    Réponses: 13
    Dernier message: 05/12/2003, 11h29
  4. Requêtes imbriquées ?
    Par Ph. B. dans le forum XMLRAD
    Réponses: 7
    Dernier message: 06/05/2003, 14h19
  5. Requête imbriquée et indexes INTERBASE
    Par vadim dans le forum InterBase
    Réponses: 2
    Dernier message: 06/09/2002, 17h15

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