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

Langage SQL Discussion :

Double requête sur une table


Sujet :

Langage SQL

  1. #1
    Membre régulier Avatar de sub-0
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 197
    Points : 76
    Points
    76
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    POPULATION ( no-com, annee, sexe, nb-pers, nb-nais )
    Merci

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 099
    Points : 28 390
    Points
    28 390
    Par défaut
    Montre nous la requête que tu as commencé à écrire. Nous pourrons alors t'aider à la mettre au point.

  3. #3
    Membre régulier Avatar de sub-0
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 197
    Points : 76
    Points
    76
    Par défaut
    j'ai fais ça mais je suis pas sur du resultat:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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;

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 099
    Points : 28 390
    Points
    28 390
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
            )
    ;

  5. #5
    Membre régulier Avatar de sub-0
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 197
    Points : 76
    Points
    76
    Par défaut
    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.

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Une autre solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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;

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

Discussions similaires

  1. Comment faire une double requête sur une table
    Par giova_fr dans le forum Langage SQL
    Réponses: 6
    Dernier message: 04/06/2010, 18h08
  2. Effectuer une requête sur une table.
    Par Premium dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/05/2007, 16h27
  3. Recupérer le résultat d'une requête sur une table Firebird
    Par defluc dans le forum Bases de données
    Réponses: 7
    Dernier message: 20/04/2007, 18h30
  4. Réponses: 5
    Dernier message: 08/01/2007, 21h03
  5. requéte sur une table
    Par iutcien dans le forum Langage SQL
    Réponses: 1
    Dernier message: 23/06/2006, 15h42

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