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 :

Expert - Problème de cardinalité


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 10
    Points : 9
    Points
    9
    Par défaut Expert - Problème de cardinalité
    Salut,

    j'ai 3 tables A, B, C.

    1 entrée de A peut avoir de 1 à n entrées dans B
    1 entrée de A peut avoir de 1 à n entrées dans C

    Soit le cas de figure où 1 entrée de A à 4 entrées dans B et 2 entrées dans C

    Peut-on faire en une seule requête une somme sur les montants dans B et un dénombrement sur les dimensions de C sans risquer que les données ne soient démultipliées. Je n'y arrive qu'en faisant un distinct sur les champs à sommer/dénombrer mais vis à vis de la somme c'est plus qu'hasardeux ? Sans le distinct le dénombrement de C est multiplié par 4 et la somme sur B est multiplié par 2.

    Je pense que non mais j'attends confirmation.

  2. #2
    jnore
    Invité(e)
    Par défaut
    Donne-nous quelques données contenues dans tes tables ainsi que les noms de champs et tables.

  3. #3
    Membre confirmé Avatar de chrifo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    444
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 444
    Points : 481
    Points
    481
    Par défaut
    Bonjour,
    L'utilisation d'une sous-requête vous évitera aisément le produit cartésien tant redouté.
    Je penche, donc je suis

  4. #4
    Futur Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par jnore
    Donne-nous quelques données contenues dans tes tables ainsi que les noms de champs et tables.
    en raccourci (très très!!!) voici les tables

    A = contrats

    CONTRAT.NUMCONTRAT
    CONTRAT.NUMLOG
    CONTRAT.NUMLIT

    B = rubriques au contrat (1 à n rubriques)

    RUBCON.NUMCONTRAT
    RUBCON.NUMRUB
    RUBCON.MONTANT -> a sommer

    C = patrimoine (1 logement contient de 1 à n lits)

    PATRIMOINE.NUMLOG
    PATRIMOINE.NUMLIT -> à compter

    select A.NUMCONTRA,
    count(PATRIMOINE.NUMLOG) NBLITS
    sum(RUBCON.MONTANT) REDEVANCE
    from A, B,C
    where A.NUMCONTRAT = B.NUMCONTRAT
    and CONTRAT.NUMLOG = PATRIMOINE.NUMLOG
    group by A.NUMCONTRA

    --> conséquence pour les logements à 2 lits et les contrats à 4 rubriques

    NBLITS est multiplié par 4
    REDEVANCE est multiplié par 2

    avec un distinct sur le count le pb est réglé mais c'est pas clean. idem sur la redevance mais c'est encore moins clean.

    --> Sauf si qq chose m'échappe, de part les cardinalités, nécessairement il faut faire des sous requêtes

    Merci de vos conseils !

  5. #5
    jnore
    Invité(e)
    Par défaut
    essaie ceci:

    J'espère avoir bien déduit les liens entre tables.


    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 sousrequete.numcontrat,sousrequete.sum(somme) as somme,sousrequete.sum(cpt) as cpt
    FROM
    	(
    		select numcontrat,sum(montant) as somme,0 as cpt
    		FROM contrats join rubcon
    		on (contrat.numcontrat=rubcon.numcontrat)
    		GROUP BY numcontrat
     
    		UNION
     
    		select numcontrat,0 as somme,count(numlit) as cpt
    		FROM contrats join patrimoine
    		on (contrat.numlog=patrimoine.numlog)
    		GROUP BY numcontrat
    	) as sousrequete
     
    group by numcontrat

Discussions similaires

  1. [MCD -> MPD] Problème avec cardinalités 1:1 - 0:1
    Par WarDrone dans le forum PowerAMC
    Réponses: 2
    Dernier message: 07/06/2011, 11h34
  2. [MCD] Problème de cardinalité dans un MCD
    Par laracroft87 dans le forum Schéma
    Réponses: 2
    Dernier message: 07/02/2010, 12h31
  3. [MCD] Problème de cardinalité (3-3)
    Par kazehino dans le forum Schéma
    Réponses: 2
    Dernier message: 02/06/2009, 17h22
  4. [Expert] problème de typpage dans un FETCH INTO
    Par Tahom87 dans le forum PL/SQL
    Réponses: 4
    Dernier message: 05/02/2009, 14h48
  5. [MCD] problèmes de cardinalités
    Par trefle dans le forum Schéma
    Réponses: 10
    Dernier message: 10/11/2008, 21h09

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