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 et SQL. Discussion :

selection avec condition ou non


Sujet :

Requêtes et SQL.

  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 604
    Points
    4 604
    Par défaut selection avec condition ou non
    Bonjour

    J'ai un problème de sélection avec un requête :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT CLIENT.societe , PRODUIT.nom
    FROM CLIENT , COMMANDE , DETAILCOMMANDE , PRODUIT 
    WHERE CLIENT.n_cl=COMMANDE.n_cl
    AND COMMANDE.n_com=DETAILCOMMANDE.n_com
    AND DETAILCOMMANDE.n_pr=PRODUIT.n_pr ;

    Je desir selectionner la societe cliente , ainsi que les produits qu'elle a commandé . Mais je doit également selectionner dans le même tableau de client les societes n'ayant pas fait de commande . Problème je ne sais pas afficher cette seconde contrainte dans mon tableau .



    Je pensais à ceci mais faux bien sur :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT CLIENT.societe , PRODUIT.nom
    FROM CLIENT , COMMANDE , DETAILCOMMANDE , PRODUIT 
    WHERE CLIENT.n_cl=COMMANDE.n_cl
    AND COMMANDE.n_com=DETAILCOMMANDE.n_com
    AND DETAILCOMMANDE.n_pr=PRODUIT.n_pr 
    OR CLIENT.n_cl NOT IN ( SELECT COMMANDE.n_cl FROM COMMANDE ) ;

    Merci d'avance de bien vouloir éclairer ma lanterne

  2. #2
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour Tanaka59,

    Pour cela, il faut passer par des jointures avec flèches à droite (LEFT JOIN). Même pour d'autres usages, d'ailleurs, il est conseillé de joindre plutôt que d'utiliser la clause WHERE.

    Passes par l'assistant : tes relations sont bien construites, il te proposera donc les bonnes liaisons. Ajoutes tes tables dans l'ordre de ta requête. Il suffira, ensuite, de cliquer sur les traits de liaison, et de faire en sorte que la flèche soit orientée à droite. Pour cela, étudier les explications (simples) décrites.

    De ce fait, ta seconde requête, si je peux me permettre, est une usine à gaz pour pas grand chose.

  3. #3
    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 604
    Points
    4 604
    Par défaut
    Bonsoir

    Voici , un essai pas encore satisfaisant mais j'ai réussi une partie :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT CLIENT.societe , PRODUIT.nom
    FROM CLIENT , PRODUIT , COMMANDE , DETAILCOMMANDE 
    WHERE EXISTS ( SELECT CLIENT.n_cl , COMMANDE.n_cl FROM CLIENT LEFT JOIN COMMANDE ON CLIENT.n_cl=COMMANDE.n_cl )
    AND  COMMANDE.n_com=DETAILCOMMANDE.n_com
    AND DETAILCOMMANDE.n_pr=PRODUIT.n_pr ;

    J'ai toujours un problème de doublon , chaque nom de produit s'affiche pour chaque client , hors ce n'est pas ce que je veux

    Merci d'avance

    Je bloque pour le reste désolé

  4. #4
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Si nous te proposons quelque chose et que tu fais autre chose qui génère un autre problème, nous ne nous en sortirons pas.

    Peux-tu appliquer ceci :
    Citation Envoyé par Richard_35
    Passes par l'assistant : tes relations sont bien construites, il te proposera donc les bonnes liaisons. Ajoutes tes tables dans l'ordre de ta requête. Il suffira, ensuite, de cliquer sur les traits de liaison, et de faire en sorte que la flèche soit orientée à droite. Pour cela, étudier les explications (simples) décrites.
    ?

  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 604
    Points
    4 604
    Par défaut
    A oups j'ai oublié de préciser je doit éviter d'utiliser l'assistant

  6. #6
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Et pourquoi, stp ?

  7. #7
    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 604
    Points
    4 604
    Par défaut
    L'énoncé impose de faire via la console en SQL et non via le tableau .

    J'ai essayé quand même via le tableau et je me retrouve avec ceci en code sql :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT CLIENT.societe, PRODUIT.nom
    FROM PRODUIT INNER JOIN ((CLIENT INNER JOIN COMMANDE ON (COMMANDE.n_cl = CLIENT.n_cl) AND (CLIENT.n_cl = COMMANDE.n_Cl)) INNER JOIN DETAILCOMMANDE ON COMMANDE.n_com = DETAILCOMMANDE.n_com) ON PRODUIT.n_pr = DETAILCOMMANDE.n_pr
    WHERE (((CLIENT.n_cl)=[COMMANDE].[n_cl] And (CLIENT.n_cl)=[COMMANDE].[n_cl]) AND ((COMMANDE.n_com)=[DETAILCOMMANDE].[n_com] And (COMMANDE.n_com)=[DETAILCOMMANDE].[n_com]) AND ((DETAILCOMMANDE.n_pr)=[PRODUIT].[n_pr] And (DETAILCOMMANDE.n_pr)=[PRODUIT].[n_pr]) AND ((COMMANDE.n_Cl)=[COMMANDE].[n_cl] And (COMMANDE.n_Cl)=[COMMANDE].[n_cl]) AND ((PRODUIT.n_pr)=[PRODUIT].[n_pr] And (PRODUIT.n_pr)=[PRODUIT].[n_pr]) AND ((DETAILCOMMANDE.n_com)=[DETAILCOMMANDE].[n_com] And (DETAILCOMMANDE.n_com)=[DETAILCOMMANDE].[n_com])) OR (([COMMANDE].[n_cl] Is Null) AND ([COMMANDE].[n_cl] Is Null)) OR (((CLIENT.n_cl)<>"Vrai") AND ((COMMANDE.n_Cl)<>"Faux")) OR (((CLIENT.n_cl)<>"Faux") AND ((COMMANDE.n_Cl)<>"Vrai"));

    La j'avoue ne plus avoir d'idée ^^

  8. #8
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 709
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 709
    Points : 57 346
    Points
    57 346
    Billets dans le blog
    41
    Par défaut
    bonsoir,

    comme l'a expliqué Richard, il suffit de modifier les types de jointures dans l'assistant (double-clique sur la relation puis prendre le type "2"):

    Client───→Commande───→DetailCommande ───→Produit
    ... et de repasser en mode SQL pour récupérer le code

  9. #9
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour Tanaka59 et Fabien,

    Citation Envoyé par Tanaka59
    L'énoncé impose de faire via la console en SQL .../...
    ==> s'agit-il d'un exercice ?

  10. #10
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 709
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 709
    Points : 57 346
    Points
    57 346
    Billets dans le blog
    41
    Par défaut
    Citation Envoyé par tanaka59 Voir le message
    L'énoncé impose de faire via la console en SQL et non via le tableau .
    c'est promis, je ne dirais pas à ton prof que tu es passé par l'assistant graphique pour pondre le SQL

    L'assistant ayant aussi tendance à rajouter des parenthèses inutiles dans le code SQL, pense à les enlever pour ne pas te faire démasquer

    Fabien
    ex-étudiant

  11. #11
    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 604
    Points
    4 604
    Par défaut
    Bonsoir

    Effectivement il s'agit d'un exercice

    Promis j'enlèverais les parenthèses pour pas me faire prendre

    Encore un grand merci d'avance .

    J'ai trouvé la solution via l'assitant et ça marche :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT CLIENT.societe, PRODUIT.nom
    FROM ((CLIENT LEFT JOIN COMMANDE ON CLIENT.[n_cl] = COMMANDE.[n_cl]) LEFT JOIN DETAILCOMMANDE ON COMMANDE.[n_com] = DETAILCOMMANDE.[n_com]) LEFT JOIN PRODUIT ON DETAILCOMMANDE.n_pr = PRODUIT.n_pr;


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

Discussions similaires

  1. [XSLT] SELECT avec condition
    Par olbouss dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 03/04/2008, 10h10
  2. Réponses: 0
    Dernier message: 05/02/2008, 10h09
  3. Select avec Condition et Valeurs Introduites
    Par faressam dans le forum Requêtes et SQL.
    Réponses: 14
    Dernier message: 16/08/2007, 14h50
  4. [HyperFile] requete de selection avec condition de comptage
    Par pierre.zelb dans le forum HyperFileSQL
    Réponses: 1
    Dernier message: 16/02/2006, 10h20
  5. Réponses: 6
    Dernier message: 08/06/2004, 14h51

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