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 :

Requete SQL : 2 tables + count


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 40
    Points : 31
    Points
    31
    Par défaut Requete SQL : 2 tables + count
    Bonjour,

    j'ai un problème avec une requête, voici mes 2 tables:

    Table1:
    pk_id1 _______ attr ....
    1 ____________ blabla
    2 ____________ ....
    3 ____________ ...


    Table2:
    pk_id2 ______ fk_id2 (ref pk_id1) __ attr ...
    1 ___________ 1 __________________ ...
    2 ___________ 1 __________________ ...
    3 ___________ 3 __________________ ...

    J'essaye de trouver une requête qui me renvoie les champs de la table1 avec quelques conditions sur les attributs (jusqu'à la pas de soucis), mais je voudrais aussi retourner un colonne qui correspond au nombre de ligne dans la table2 qui font référence à la ligne en question dans la table1:


    Resultat
    pk_id1 _______ nb_entrée_table2 _________ attr ....
    1 ____________ 2 _________________________ ...
    2 ____________ 0 (ou NULL) _______________ ...
    3 ____________ 1 _________________________ ...

    J'espère que c'est assez clair ...

    J'ai essayé avec un count et un group by sur tout les attributs de la table1 mais je n'obtiens pas ce que je souhaite

    Auriez vous une idée ?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 081
    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 081
    Points : 30 827
    Points
    30 827
    Par défaut
    Donne les prémisses de ta requête, nous pourrons alors la corriger.
    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
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 40
    Points : 31
    Points
    31
    Par défaut
    pk_id1 _______ attr ....
    1 ____________ blabla
    2 ____________ ....
    3 ____________ ...

    pk_id2 ______ fk_id2 (ref pk_id1) __ attr ...
    1 ___________ 1 __________________ ...
    2 ___________ 1 __________________ ...
    3 ___________ 3 __________________ ...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT COUNT(pk_id2) AS nb_entree, pk_id1, attr ... FROM table1, table2 
    WHERE  attr = 2 AND fk__id2 = pk_id1
    GROUP BY liste des attributs choisi dans le select;
    Cette requête fonctionne mais ne me retourne que 2 lignes, car pour pk_id1 = 2 il n'y a aucune entrée dans la table 2, la clause WHERE fk__id2 = pk_id1 n'est donc pas vérifiée

    Or je souhaiterai avoir 3 lignes en retour, les 2 actuelles + la 3ème indiquant un 0 dans la colonne COUNT, mais je ne vois pas comment faire.

    Merci pour votre aide.

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    L'expression d'une jointure dans le where equivaut à une equijointure (INNER JOIN) qui elimine les lignes pour lesquelles il n'y a pas de liaison. Il est donc normal que ces lignes ne soient pas commptabilisée dans le COUNT.

    En effectuant une jointure externe, tu prends tous les enregs de Table1 même si elle n'ont pas de liaison avec des enregs de Table2.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT COUNT(pk_id2) AS nb_entree, pk_id1, attr ... 
    FROM table1 
    	LEFT JOIN table2 
    		ON table1.pk_id1 = table2.fk__id2
    GROUP BY liste des attributs choisi dans le SELECT;

  5. #5
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 40
    Points : 31
    Points
    31
    Par défaut
    Merci beaucoup, j'ai du mal avec les JOIN, j'utilise toujours les INNER JOIN implicitement avec un WHERE comme ici...

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Ca te donne une bonne raison de te mettre aux JOIN. Même si c'est pour faire une equijointure, l'utilisation du INNER JOIN apporte une clarté en différenciant les conditions de jointures des critères de filtre du WHERE.

    Ensuite on a souvent besoin de faire des jointures externes.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 40
    Points : 31
    Points
    31
    Par défaut
    Ok, et pendant que j'y suis comment on fait pour faire 2 JOIN ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    FROM table1 INNER JOIN table2 ON ... = ..., table2 LEFT JOIN table3 ON ... = ...
    Un truc comme ça ?

    Merci

  8. #8
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Pas la peine que je fasse un cours, avec ça tu seras blindé :

    http://sqlpro.developpez.com/cours/sqlaz/jointures/

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

Discussions similaires

  1. Requete SQL multi tables
    Par csilas dans le forum VB 6 et antérieur
    Réponses: 15
    Dernier message: 28/01/2010, 15h05
  2. requete sql sur tables paradox
    Par quedudev dans le forum Bases de données
    Réponses: 1
    Dernier message: 18/02/2009, 17h42
  3. requete SQL 3 tables
    Par basson dans le forum Développement
    Réponses: 2
    Dernier message: 05/06/2008, 09h58
  4. Requete SQL sur table dbase et date du jour
    Par Jean-François PETIT dans le forum Bases de données
    Réponses: 5
    Dernier message: 29/03/2005, 09h31
  5. requete sql mutlis tables
    Par tommath dans le forum Langage SQL
    Réponses: 12
    Dernier message: 30/08/2004, 09h54

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