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 :

Jointure + count = faux


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2013
    Messages : 11
    Par défaut Jointure + count = faux
    Bonjour a tous,

    je me casse la tete depuis quelques jours sur un problème. J'ai beau chercher sur internet, je ne trouve pas la solution, quelqu'un peut être aura la solution a mon problème ?

    j'ai deux tables :

    table1
    id id_img label
    1 1 machin1
    2 1 machin2
    3 1 machin3

    table2
    id id_img_table1 text
    1 1 truc1
    2 1 truc2
    3 1 truc3


    J'aimerai dont savoir combien j'ai de ligne dans la "colonne id_img". Evidement je dois garder la jointure avec la "table2".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT count(table1.id_img) AS count
    FROM table1 
    INNER JOIN table2 ON (table1. id_img=table2.id_img_table1) 
    WHERE table1.id_img=1
    Le résultat est 9 or je n'ai que 3 lignes dans la table "table1"


    Comment faire ?

    Merci pour votre aide !!

    Mat.

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour
    Citation Envoyé par mat3000 Voir le message
    Evidement je dois garder la jointure avec la "table2".
    Pourquoi ? dans la requête que vous présentez, la jointure n'a aucun interet, (elle supprimera juste les lignes de table1 qui n'ont pas de correspondance dans table2)

    en d'autres termes : quel est votre besoin final ?

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2013
    Messages : 11
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    Bonjour


    Pourquoi ? dans la requête que vous présentez, la jointure n'a aucun interet, (elle supprimera juste les lignes de table1 qui n'ont pas de correspondance dans table2)

    en d'autres termes : quel est votre besoin final ?


    bonjour aieeeuuuuu,

    Pour présenter mon problème j'ai simplifié les choses. Normalement, je fais une jointure car j'ai besoin des infos qui sont défini dans la table2.

    J'aimerai beaucoup t'en dire plus mais ca me prendrait beaucoup trop de temps a expliquer ce pourquoi j'ai besoin de faire cette jointure.

    Mais si c'est vraiment important pour resoudre mon probleme, je trouverai le temps



    Merci pour ton aide !

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 134
    Par défaut
    Le résultat de la requête n'est pas faux, il est exactement celui que tu as demandé...
    Il faut juste identifier ce que tu cherches comme résultat et poser correctement la requête.

    Avec count(table1.id_img) tu comptes combien il y a de valeurs non NULL dans la colonne table1.id_img pour les lignes retournées par la requête.
    Il y a bien 9 lignes retournées et pour chacune table1.id_img n'est pas NULL... donc le résultat est 9.

    Si tu comptes le nombre de valeurs différentes (DISTINCT) dans table1.id_img, tu obtiendras 1.
    En revanche, en comptant le nombre de valeurs différentes dans table1.id, tu obtiendras 3.
    Est-ce bien ce que tu recherches ?
    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.

  5. #5
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2013
    Messages : 11
    Par défaut
    Citation Envoyé par al1_24 Voir le message
    Le résultat de la requête n'est pas faux, il est exactement celui que tu as demandé...
    Il faut juste identifier ce que tu cherches comme résultat et poser correctement la requête.

    Avec count(table1.id_img) tu comptes combien il y a de valeurs non NULL dans la colonne table1.id_img pour les lignes retournées par la requête.
    Il y a bien 9 lignes retournées et pour chacune table1.id_img n'est pas NULL... donc le résultat est 9.

    Si tu comptes le nombre de valeurs différentes (DISTINCT) dans table1.id_img, tu obtiendras 1.
    En revanche, en comptant le nombre de valeurs différentes dans table1.id, tu obtiendras 3.
    Est-ce bien ce que tu recherches ?
    Bonjour al1_24,

    Merci pour ta réponse,


    En revanche, en comptant le nombre de valeurs différentes dans table1.id, tu obtiendras 3.



    c'est bien ca, mais je ne comprends pas comment compter le nombre de valeurs différentes ?

  6. #6
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    count(distinct table1.id)

  7. #7
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 : 16 814
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par mat3000
    je ne comprends pas comment compter le nombre de valeurs différentes ?
    La solution est là :
    Citation Envoyé par al1_24
    Si tu comptes le nombre de valeurs différentes (DISTINCT) dans table1.id_img, tu obtiendras 1.
    En revanche, en comptant le nombre de valeurs différentes dans table1.id, tu obtiendras 3.
    Il faut faire COUNT(DISTINCT table1.id).

    D'ailleurs, si cet id est la clé primaire de la table, autant compter le nombre de lignes avec COUNT(*) !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  8. #8
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2013
    Messages : 11
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    La solution est là :


    Il faut faire COUNT(DISTINCT table1.id).

    D'ailleurs, si cet id est la clé primaire de la table, autant compter le nombre de lignes avec COUNT(*) !
    Lorsque je fais ca, j'obtiens 1...
    Ce n'est pas la clef primaire

  9. #9
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Citation Envoyé par mat3000 Voir le message
    Lorsque je fais ca, j'obtiens 1...
    Il faut bien le faire sur id, pas sur id_img !

Discussions similaires

  1. Select - jointure- count
    Par tonin10 dans le forum Requêtes
    Réponses: 19
    Dernier message: 07/01/2010, 16h26
  2. UPDATE + JOINTURE + COUNT
    Par FMaz dans le forum Requêtes
    Réponses: 1
    Dernier message: 03/01/2010, 12h54
  3. auto jointure, count()
    Par johnny3 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 13/06/2009, 22h40
  4. Jointure / Count
    Par altecad dans le forum Requêtes
    Réponses: 1
    Dernier message: 16/05/2007, 09h30
  5. [débutant] Jointure + Count
    Par Yann21 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 28/10/2003, 13h52

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