Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
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 04/10/2011, 19h09   #1
Membre du Club
 
Inscription : février 2006
Messages : 310
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 310
Points : 64
Points : 64
Par défaut Aide sur une requête

Bonjour,
Je souhaite connaitre le nombre d'enregistrements dans une table avec des conditions sur deux autres tables, voici le schéma :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
TABLE 1 (données)
idp
libellep
visiblep
 
TABLE 2 (type, classification)
idpt
libellept
 
TABLE 3 (elle lie la TABLE 1 et 2)
idcpl (id de l'enregistrement de la table 1)
idcplcp (id du type de la table 2)
voici ma requête :
Code :
1
2
3
4
5
6
 
SELECT libellept, COUNT( idp ) AS total1
FROM  `developph_codespromo_type` , developph_codespromo, developph_codespromo_link
WHERE idp = idcpl
AND idcplcp = idpt
AND visiblep =1
le but étant de connaitre le nom d'élément de la table 1 actif (visible = 1) classé par type de données.

J'espère être clair ....

dans ma requête je n'ai qu'une valeur retournée ... ce n'est donc pas correct !

Merci de votre aide.

Jérémie
__________________
La vie à le gout qu'on lui donne
mims1664 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2011, 20h07   #2
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 641
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 641
Points : 2 634
Points : 2 634
Bonjour,
déjà un peu de lecture : http://sqlpro.developpez.com/cours/sqlaz/jointures/ => regardez la différence entre une jointure interne et externe ...


ensuite les groupements : http://sqlpro.developpez.com/cours/sqlaz/ensembles/

Avec ca vous devriez vous en sortir.
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/10/2011, 14h07   #3
Membre éclairé
 
Avatar de boussafi
 
Homme
Ingénieur développement logiciels
Inscription : septembre 2007
Messages : 342
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Algérie

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Industrie

Informations forums :
Inscription : septembre 2007
Messages : 342
Points : 397
Points : 397
Envoyer un message via Yahoo à boussafi Envoyer un message via Skype™ à boussafi
Code :
1
2
3
4
SELECT libellept, COUNT( idp ) AS total1
FROM TABLE_1 T1 JOIN TABLE_3 T3 ON T1.idp=T3.idcpl JOIN TABLE_2 T2 ON T3.idcplcp=T2.idpt
WHERE AND T1.visiblep =1
GROUP BY libellept
boussafi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/10/2011, 14h17   #4
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
Citation:
Envoyé par boussafi Voir le message
Code :
1
2
3
4
SELECT libellept, COUNT( idp ) AS total1
FROM TABLE_1 T1 JOIN TABLE_3 T3 ON T1.idp=T3.idcpl JOIN TABLE_2 T2 ON T3.idcplcp=T2.idpt
WHERE AND T1.visiblep =1
GROUP BY libellept
WHERE AND c'est enthousiasme

Pour l’écriture des jointures, selon le SGBD utilisé, cette syntaxe peut être une erreur. C'est sans doute mieux de mettre la syntaxe complète INNER JOIN
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/10/2011, 14h41   #5
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 959
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 959
Points : 17 791
Points : 17 791
INNER est un mot clef facultatif. Cependant c'est plus lisible avec INNER et OUTER !

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/10/2011, 22h32   #6
Membre du Club
 
Inscription : février 2006
Messages : 310
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 310
Points : 64
Points : 64
Bonsoir,
Merci de votre aide, cependant je n'ai qu'une valeur en retour alors que je cherche connaitre la quantité de chaque cas.

J'ai du au passage corriger la requette :

Code :
1
2
3
4
5
6
SELECT libellept, COUNT( idp ) AS total1
FROM TABLE_1 T1
JOIN TABLE_3 T3 ON T1.idp = T3.idpt
JOIN TABLE_2 T2 ON T2.idcplcp = T3.idpt
WHERE T1.visiblep =1
GROUP BY libellept
Je vois pas ou ca bloque ...

Merci de votre aide.
__________________
La vie à le gout qu'on lui donne
mims1664 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/10/2011, 22h57   #7
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 641
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 641
Points : 2 634
Points : 2 634
La requête que vous venez de poster est correcte niveau syntaxe. donc si elle ne ramène pas ce que vous voulez c'est que vous avez mal déterminé votre besoin
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2011, 22h19   #8
Membre du Club
 
Inscription : février 2006
Messages : 310
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 310
Points : 64
Points : 64
Bonsoir,

Je crois que le mieux est de donner un jeu de données et de vous expliquer le résultat.

TABLE_1
1; libellé1; 1
2; libellé2; 1
3; libellé3; 0
4; libellé4; 1
5; libellé5; 0
6; libellé6; 1

TABLE_2
1; classe1
2; classe2
12; classe3

TABLE_3 (la liaison entre TABLE_1 et TABLE_2)
1; 2
2; 12
3; 2
4; 2
5; 2
6; 2

la requette que je cherche à faire doit me retourner le nom de valeur dans la table "TABLE_1" classé dans la "classe1"; "classe2"; ... (TABLE_2)

Voici le résultat pour ce jeu de données :

classe1 = 0
classe2 = 4
classe3 = 1

Je sais pas si c'est plus clair ... c'est pas facile d'expliquer ce que l'on cherche à obtenir ....

En tout cas merci de votre aide.

Jérémie
__________________
La vie à le gout qu'on lui donne
mims1664 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2011, 09h42   #9
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 328
Points : 18 328
Envoyer un message via MSN à CinePhil
Non, ce n'est pas plus clair !
Citation:
la requette que je cherche à faire doit me retourner le nom de valeur dans la table "TABLE_1" classé dans la "classe1"; "classe2"; ... (TABLE_2)
Qu'appelles-tu "le nom de valeur dans la TABLE_1" ?

Citation:
classé dans la "classe1"; "classe2"; ... (TABLE_2)
Classé dans le sens trié ?

Avec les noms réels des tables, ça aiderait un petit peu à la compréhension car on saurait déjà un peu plus de quoi on parle. Et si tu pouvais nous expliquer en français ce que contiennent ces tables et quelle est la nature de l'association entre TABLE_1 etr TABLE_2, ce serait encore plus clair.

Bref, lis la phrase en bleu de ma signature et applique son principe.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2011, 09h46   #10
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 641
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 641
Points : 2 634
Points : 2 634
bonjour,


Dans ce cas :

table_1(id, nom, cnt)
table_2(id, classe)
table_3(id_1, id_2)

Code :
1
2
3
4
5
6
 
SELECT a.classe, count(c.id)
FROM table_2 a
LEFT OUTER JOIN table_3 b ON a.id = b.id_2
LEFT OUTER JOIN table_1 c ON c.id = b.id_1 AND c.cnt = 1
GROUP BY a.classe
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2011, 10h07   #11
Membre éclairé
 
Avatar de boussafi
 
Homme
Ingénieur développement logiciels
Inscription : septembre 2007
Messages : 342
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Algérie

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Industrie

Informations forums :
Inscription : septembre 2007
Messages : 342
Points : 397
Points : 397
Envoyer un message via Yahoo à boussafi Envoyer un message via Skype™ à boussafi
voilà la requete qui repond ton besoin
Code :
1
2
3
4
SELECT Table_2.classe, Count(Table_1.id) AS CompteDeid
FROM (Table_1 RIGHT JOIN Table_3 ON Table_1.id = Table_3.id__1) RIGHT JOIN Table_2 ON Table_3.id_2 = Table_2.id
GROUP BY Table_2.classe
ORDER BY Table_2.classe;
résulat
Code :
1
2
3
4
classe	CompteDeid
classe1	0
classe2	4
classe3	1
bonne chance
boussafi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2011, 23h22   #12
Membre du Club
 
Inscription : février 2006
Messages : 310
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 310
Points : 64
Points : 64
Super c'est exactement ca !! vous etes vraiment trop fort !!!

j'ai juste adapté avec la condition visible = 1 et ca fonctionne nikel

Merci beaucoup ! c'est un vrai métier ca!

Jérémie
__________________
La vie à le gout qu'on lui donne
mims1664 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 04h17.


 
 
 
 
Partenaires

Hébergement Web