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 16/11/2010, 21h38   #1
Membre du Club
 
Avatar de sub-0
 
Homme
Étudiant
Inscription : novembre 2008
Messages : 185
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2008
Messages : 185
Points : 43
Points : 43
Par défaut Double requête sur une table

salut tout le monde,
J'ai besoin de faire une requette sur une table mais je ne sais pas comment faire: je dois retourner les nom des communes dans lesquelles il y a eu au moins une naissance à la fois en 2007 et en 2008, voila ma table sur la quelle je dois sélectionner toute les lignes dont l'année égale à 2007 et 2008 et nb-nais égale a 1:

Code :
POPULATION ( no-com, annee, sexe, nb-pers, nb-nais )
Merci
sub-0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2010, 22h38   #2
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 434
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 51
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 434
Points : 7 456
Points : 7 456
Montre nous la requête que tu as commencé à écrire. Nous pourrons alors t'aider à la mettre au point.
__________________
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton et pensez aux balises [code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 19h32   #3
Membre du Club
 
Avatar de sub-0
 
Homme
Étudiant
Inscription : novembre 2008
Messages : 185
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2008
Messages : 185
Points : 43
Points : 43
j'ai fais ça mais je suis pas sur du resultat:

Code :
1
2
3
4
5
6
7
SELECT c.no-com Numero_de_commune, c.nom-com Nom-de-commune
FROM COMMUNE c,DEPARTEMENT d,POPULATION p
WHERE d.nom-dept LIKE 'Meuse'
AND d.no-dept = c.no-dept
AND p.no-com = c.no-com
AND p.annee = 2007 AND p.nb-nais >= 1
AND p.annee = 2008 AND p.nb-nais >= 1;
sub-0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 21h06   #4
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 434
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 51
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 434
Points : 7 456
Points : 7 456
Tu ne devrais pas trouver grand chose avec cette requête...
Penses-tu pouvoir trouver une ligne de la la table population qui ait deux valeurs dans la colonne annee ?

Il faut déjà que tu commences par utiliser la syntaxe normalisée pour les jointures, en utilisant INNER JOIN.

Ensuite, le plus simple est d'utiliser EXISTS pour chercher les communes répondant à tes critères.

Cela donne quelque chose comme ça :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
SELECT  c.no_com    Numero_de_commune
    ,   c.nom_com   Nom_de_commune
FROM    commune     c
    INNER JOIN
        departement d
        ON  d.no_dept = c.no_dept
WHERE   d.nom_dept LIKE 'Meuse'
    AND EXISTS
        (   SELECT  1
            FROM    population  p1
            WHERE   p1.no_com = c.no_com
                AND p1.nb_nais >= 1
                AND p1.annee = 2007 
        )
    AND EXISTS
        (   SELECT  1
            FROM    population  p2
            WHERE   p2.no_com = c.no_com
                AND p2.nb_nais >= 1
                AND p2.annee = 2008
        )
;
__________________
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton et pensez aux balises [code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 15h54   #5
Membre du Club
 
Avatar de sub-0
 
Homme
Étudiant
Inscription : novembre 2008
Messages : 185
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2008
Messages : 185
Points : 43
Points : 43
Merci bien Alein, je ne conaissis pas la fonction de jointure inner ça fait au moins un an que j ai pas lu un cours de SQL :p, peut être c est le bon moment de le faire.
sub-0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 16h03   #6
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 680
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 680
Points : 10 479
Points : 10 479
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Une autre solution :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
  SELECT c.no_com  AS Numero_de_commune,
         c.nom_com AS Nom_de_commune
    FROM commune c
         INNER JOIN departement d
           ON d.no_dept = c.no_dept
         INNER JOIN population p
           ON p.no-com = c.no-com
   WHERE d.nom_dept = 'Meuse'
     AND p.nb-nais >= 1
     AND p.annee IN (2007, 2008)
GROUP BY c.no_com, c.nom_com
  HAVING count(DISTINCT p.annee) = 2;
__________________
Email : http://scr.im/waldar
Waldar 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 15h58.


 
 
 
 
Partenaires

Hébergement Web