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

Requêtes MySQL Discussion :

DISTINCT sur plusieurs tables


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 10
    Par défaut DISTINCT sur plusieurs tables
    Bonjour

    voila plusieurs jours que je cherche une solution à mon problème :

    j'arrive individuellement sur chacune d'elle à avoir les résultats que je souhaite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT COUNT(enfants_enfant_id) AS nombreET, COUNT(DISTINCT enfants_enfant_id) AS nombreEU
                FROM enfants_has_activites_annuelles
                JOIN activites_annuelles ON activites_annuelles.activite_id = enfants_has_activites_annuelles.activites_activite_id
    j'ai la même chose avec les tables enfants_has_clsh, enfants_has_cvl, enfants_has_activites. :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT COUNT(enfants_enfant_id) AS nombreET, COUNT(DISTINCT enfants_enfant_id) AS nombreEU
                FROM enfants_has_cvl
                JOIN cvl ON cvl.cvl_id = enfants_has_cvl.cvl_cvl_id
    ---
    SELECT COUNT(enfants_enfant_id) AS nombreET, COUNT(DISTINCT enfants_enfant_id) AS nombreEU
                FROM enfants_has_clsh
                JOIN clsh ON clsh.clsh_id = enfants_has_clsh.clsh_clsh_id
    ---
    SELECT COUNT(enfants_enfant_id) AS nombreET, COUNT(DISTINCT enfants_enfant_id) AS nombreEU
                FROM enfants_has_activites
                JOIN activites ON activites.activite_id = enfants_has_activites.activites_activite_id
    Mais je voudrais tirer les résultats sur l'ensemble des tables simultanément. C'est à dire notamment "COUNT(DISTINCT enfants_enfant_id)" sur les 4 tables.

    Merci d'avance à toute aide

  2. #2
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 430
    Billets dans le blog
    11
    Par défaut
    Une solution qui n'est peut-être pas la meilleure :
    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
    SELECT 
    *
    FROM (SELECT COUNT(enfants_enfant_id) AS nombreET, COUNT(DISTINCT enfants_enfant_id) AS nombreEU
                FROM enfants_has_activites_annuelles
                JOIN activites_annuelles ON activites_annuelles.activite_id = enfants_has_activites_annuelles.activites_activite_id
    UNION
    SELECT COUNT(enfants_enfant_id) AS nombreET, COUNT(DISTINCT enfants_enfant_id) AS nombreEU
                FROM enfants_has_cvl
                JOIN cvl ON cvl.cvl_id = enfants_has_cvl.cvl_cvl_id
    UNION
    SELECT COUNT(enfants_enfant_id) AS nombreET, COUNT(DISTINCT enfants_enfant_id) AS nombreEU
                FROM enfants_has_clsh
                JOIN clsh ON clsh.clsh_id = enfants_has_clsh.clsh_clsh_id
    UNION
    SELECT COUNT(enfants_enfant_id) AS nombreET, COUNT(DISTINCT enfants_enfant_id) AS nombreEU
                FROM enfants_has_activites
                JOIN activites ON activites.activite_id = enfants_has_activites.activites_activite_id)
    ORDER BY
    	nombreEU

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    il faut un union all et non un union.

    A part ça, ca me semble une bonne solution.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 10
    Par défaut
    Merci à vous deux pour cette solution.

    Mais à vrai dire je crois bien que je me suis mal exprimé.

    Le champ "enfants_enfant_id" se trouve dans les 4 tables.
    Un enfant peu donc être dans une ou plusieurs tables.
    Mon souhait est de pouvoir comptabiliser les enfants uniques (ce que j'arrive à faire sur 1 table mais pas en groupant les 4).

    Je pensais éventuellement créer un une table temporaire qui regroupe l'ensemble des infos des 4 autres tables et faire mon DISTINCT dessus.
    Mais n'y a-t-il pas une requête sql qui puisse faire le distinct en prenant en compte les 4 tables simultanément ?

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    euh,

    Votre but c'est donc juste de comptabilisé les enfants uniques ?

    Comment reconnait-on qu'un enfant est unqiue ?

    D'apres votre structure j'ai l'impression qu'il y a une forme d'héritage dans vos données.

    Présentez le modèle ?

  6. #6
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 430
    Billets dans le blog
    11
    Par défaut
    Et en essayant quelque chose comme cela :
    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
    23
    24
    SELECT 
    nombreEU,
    COUNT(nombreEU) nombreEU
    FROM (SELECT COUNT(enfants_enfant_id) AS nombreET, COUNT(DISTINCT enfants_enfant_id) AS nombreEU
                FROM enfants_has_activites_annuelles
                JOIN activites_annuelles ON activites_annuelles.activite_id = enfants_has_activites_annuelles.activites_activite_id
    UNION ALL
    SELECT COUNT(enfants_enfant_id) AS nombreET, COUNT(DISTINCT enfants_enfant_id) AS nombreEU
                FROM enfants_has_cvl
                JOIN cvl ON cvl.cvl_id = enfants_has_cvl.cvl_cvl_id
    UNION ALL
    SELECT COUNT(enfants_enfant_id) AS nombreET, COUNT(DISTINCT enfants_enfant_id) AS nombreEU
                FROM enfants_has_clsh
                JOIN clsh ON clsh.clsh_id = enfants_has_clsh.clsh_clsh_id
    UNION ALL
    SELECT COUNT(enfants_enfant_id) AS nombreET, COUNT(DISTINCT enfants_enfant_id) AS nombreEU
                FROM enfants_has_activites
                JOIN activites ON activites.activite_id = enfants_has_activites.activites_activite_id)
    GROUP BY
    	nombreEU
    HAVING 
    	COUNT(nombreEU) = 1
    ORDER BY
    	nombreEU

Discussions similaires

  1. Liste DISTINCT sur plusieur table
    Par Nako_lito dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 19/06/2008, 08h49
  2. Encore une requête complexe sur plusieurs tables
    Par DenPro dans le forum Langage SQL
    Réponses: 5
    Dernier message: 09/12/2003, 19h05
  3. order by sur plusieurs tables
    Par Mad_Max dans le forum Requêtes
    Réponses: 2
    Dernier message: 09/12/2003, 12h17
  4. Requête complexe sur plusieurs table
    Par DenPro dans le forum Langage SQL
    Réponses: 13
    Dernier message: 25/11/2003, 17h50
  5. A propos d'une requête SQL sur plusieurs tables...
    Par ylebihan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/09/2003, 16h26

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