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 :

COUNT afficher 0 quand la jointure ne renvoie rien


Sujet :

Langage SQL

  1. #1
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 153
    Points : 259
    Points
    259
    Par défaut COUNT afficher 0 quand la jointure ne renvoie rien
    Bonjour à tous,

    Voilà j'ai deux tables:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    entreprises (entreprises_id,nom)
    entreprises_vehicules(entreprises_id,vehicules_id)
    Je dois faire une requête qui affiche le nom de l'entreprise avec son nombre de véhicule, j'aimerais pouvoir afficher 0 quand l'entreprise n'a pas de vehicules.

    Merci de Votre aide.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 770
    Points : 52 723
    Points
    52 723
    Billets dans le blog
    5
    Par défaut
    Faites un LEFT OUTER JOIN de entreprise vers vehicule.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 153
    Points : 259
    Points
    259
    Par défaut
    Merci pour la réponse.

    ça marche nickel, par contre je voudrais restreindre les résultats selon certains critère de la table vehicules:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    véhicules (vehicules_id,nom,is_validated..)
    par exemple je veux compter seulement les vehicules dont is_validated = TRUE et là je n'ai pas toutes les entreprises :/

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    N'hésitez pas à poster votre requête.

  5. #5
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 153
    Points : 259
    Points
    259
    Par défaut
    Désolé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT e.nom, count(v.vehicules_id)
    FROM entreprises
    LEFT OUTER JOIN entreprises_vehicules AS ev ON (e.entreprises_id=ev.entreprises_id)
    LEFT OUTER JOIN vehicules AS v ON(ev.vehicules_id=v.vehicules_id)
    WHERE v.is_validated=TRUE

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Ne mettez pas la condition is_validated = TRUE dans une clause where, mais dans les conditions de jointure entre entreprises_vehicules et vehicule.

  7. #7
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Vous pouvez l'écrire ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT e.nom, count(v.vehicules_id)
    FROM
        entreprises AS e
        LEFT OUTER JOIN entreprises_vehicules AS ev
        INNER JOIN vehicules AS v
          ON v.vehicules_id = ev.vehicules_id
         AND v.is_validated = 'TRUE'
        ON ev.entreprises_id = e.entreprises_id
    Le moteur SQL va d'abord faire la jointure forte entre entreprises_vehicules et vehicules, puis va faire une jointure externe de entreprises vers ces données.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 02/11/2012, 14h13
  2. Afficher valeurs quand count = 0
    Par gg2vig dans le forum SQL
    Réponses: 2
    Dernier message: 07/07/2008, 11h11
  3. [XSLT] Quand substring-before ne renvoie rien
    Par NicaeaCivitas dans le forum XSL/XSLT/XPATH
    Réponses: 11
    Dernier message: 16/02/2007, 10h14
  4. Réponses: 9
    Dernier message: 27/01/2006, 18h00
  5. 2 Count() sur deux tables en jointures gauches
    Par Alexandre T dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/09/2003, 16h53

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