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 :

requête case if null


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2011
    Messages : 34
    Points : 20
    Points
    20
    Par défaut requête case if null
    Bonjour tout le monde

    Alors pour commencer voici la tronche de ma table:

    table appartenance :

    IdEntite | idCompagnie
    6639 6629
    6641 6626
    11257 NULL



    table entite:
    infos de l'entite + groupe de l'entite




    En gros pour résumé la situation, il faut voir idEntite comme un groupe et idCompagnie pour une entreprise.
    Pour le premier résultat ca veut dire que lentite 6636 posséde la compagnie 6629. Mais quand le champs idCompagnie est à NULL ça veut dire que le groupe possède toutes les compagnies du groupe.

    j'avais commencé à faire cette requête mais évidemment elle ne marche pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT idEntite, CASE WHEN  idCompagnie IS NULL THEN (SELECT id FROM entite WHERE entite.groupe = appartenance.idEntite) ELSE idCompagnie  END FROM appartenance ;
    Ce qui veut veut dire que quand le champs idCompagnie sera à null alors il faudrait que ça me renvoie toutes les lignes de la table entite ayant le champs groupe de la même valeur que le champs idEntite (dans notre cas toutes les lignes de entite ayant le groupe à 11257)

    J’espère avoir bien réussi à mexpliquer...

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    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 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    J'ai l'impression que tu as raisonné à l'envers pour modéliser tes données.

    En gros pour résumé la situation, il faut voir idEntite comme un groupe et idCompagnie pour une entreprise.
    Pour le premier résultat ca veut dire que lentite 6636 posséde la compagnie 6629. Mais quand le champs idCompagnie est à NULL ça veut dire que le groupe possède toutes les compagnies du groupe.
    Moi je dirais que tu as des "organismes" (entreprises, groupes, agences...).

    Si j'ai bien compris ton explication, tu as cette règle de gestion :
    Un organisme peut appartenir à plusieurs autres organismes et un organisme peut posséder plusieurs organismes.

    Ce qui donnerait le MCD suivant :
    organisme -0,n-(possesseur)---posséder
    |----------------0,n-(possédé)-----------|

    Ce qui donnerait les tables suivantes :
    organisme (org_id, org_nom...)
    org_posseder_org (opo_id_possesseur, opo_id_possede)

    Quels sont les organismes que possède l'organisme "Total" ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT o1.org_nom AS filiale
    FROM organisme o1
    INNER JOIN org_posseder_org p ON p.opo_id_possede = o1.org_id
    	INNER JOIN organisme o2 ON o2.org_id = p.opo_id_possesseur
    WHERE o2.org_nom = 'Total'
    Quels organismes possèdent l'organisme 'Alpha' ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT o2.org_nom AS possesseur
    FROM organisme o2
    INNER JOIN org_posseder_org p ON p.opo_id_possesseur = o2.org_id
    	INNER JOIN organisme o1 ON o1.org_id = p.opo_id_possede
    WHERE o1.nom = 'Alpha'

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2011
    Messages : 34
    Points : 20
    Points
    20
    Par défaut
    Yes merci de l'aide, c'est vraiment génial. Du coup j'ai adapté ce que tu m'a donné, je sais pas si je peux l'améliorer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT distinct p.idEntite,o1.id AS filiale
    FROM entite o1
    	INNER JOIN appartenance p ON o1.groupe = p.idEntite
    WHERE idCompagnie IS NULL
     
     
    UNION
     
    SELECT distinct p.idEntite,o1.id AS filiale
    FROM entite o1
    	INNER JOIN appartenance p ON o1.id = p.idCompagnie
            where idCompagnie IS NOT null

Discussions similaires

  1. requête renvoie résultat NULL
    Par dubitoph dans le forum Requêtes
    Réponses: 3
    Dernier message: 23/10/2007, 09h15
  2. Requête qui renvoie 'Null'
    Par Invit-é dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 11/06/2007, 17h32
  3. Requête et fonction NULL
    Par zeugzeug dans le forum Requêtes
    Réponses: 4
    Dernier message: 20/04/2007, 14h04
  4. requête Est pas Null
    Par emilie31 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 19/03/2007, 10h54
  5. [Requête] Fonction "Est Null" et Iif()
    Par lolo25 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 29/12/2006, 12h41

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