Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/09/2011, 16h46   #1
Nouveau Membre du Club
 
Inscription : janvier 2011
Messages : 146
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 146
Points : 26
Points : 26
Par défaut selection avec condition ou non

Bonjour

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

Code sql :
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 :
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
tanaka59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 16h58   #2
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 178
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 178
Points : 2 807
Points : 2 807
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.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/09/2011, 19h39   #3
Nouveau Membre du Club
 
Inscription : janvier 2011
Messages : 146
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 146
Points : 26
Points : 26
Bonsoir

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

Code sql :
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é
tanaka59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 19h43   #4
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 178
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 178
Points : 2 807
Points : 2 807
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.
?
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 19h51   #5
Nouveau Membre du Club
 
Inscription : janvier 2011
Messages : 146
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 146
Points : 26
Points : 26
A oups j'ai oublié de préciser je doit éviter d'utiliser l'assistant
tanaka59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 19h52   #6
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 178
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 178
Points : 2 807
Points : 2 807
Et pourquoi, stp ?
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 20h46   #7
Nouveau Membre du Club
 
Inscription : janvier 2011
Messages : 146
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 146
Points : 26
Points : 26
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 :
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 ^^
tanaka59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 21h43   #8
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 447
Points : 4 447
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"):

Citation:
Client───→Commande───→DetailCommande ───→Produit
... et de repasser en mode SQL pour récupérer le code
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/09/2011, 10h01   #9
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 178
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 178
Points : 2 807
Points : 2 807
Bonjour Tanaka59 et Fabien,

Citation:
Envoyé par Tanaka59
L'énoncé impose de faire via la console en SQL .../...
==> s'agit-il d'un exercice ?
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2011, 18h47   #10
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 447
Points : 4 447
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
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2011, 22h14   #11
Nouveau Membre du Club
 
Inscription : janvier 2011
Messages : 146
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 146
Points : 26
Points : 26
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 :
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;

tanaka59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h03.


 
 
 
 
Partenaires

Hébergement Web