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 :

Requête pour export.


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Par défaut Requête pour export.
    Bonjour.

    Voila la structure de ma BDD.

    -prospect (IDPROSPECT,nom,prenom ...)
    -automoto (IDAUTOMOTO,champ,champ)
    -obseque (IDOBSEQUEchamp,champ3,champs9)
    -retraite (IDRETRAITE,champ,champ99,champ150)
    -sante (IDSANTE,champ,champ4,champ7,champ8)

    la structure de mes tables produits est différente, chaque table produit possède un nombre différents de champs et des champs différents.

    -link_produit(ID_PRODUIT,ID_BUDGETOR,nom) nom sera automoto ou obseque ou retraite ou sante (surement inutile ...)

    dans le champs ID_PRODUIT de link_produit il viendra s'insérer suivant le produit souscrit l'id du produit, donc IDAUTOMOTO ou IDSANTE ...

    Par rapport à cette structure de ma BDD j'aimerais effectuer une selection de tout les produits souscrits par un prospect bien précis (une seule requête de préférence).

    Cela est il réalisable vu la structure de ma BDD ou alors faut il la modifier?

    Cordialement

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    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 143
    Par défaut
    Tu peux en effet faire quelque chose comme ça :
    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
    SELECT  psp.id_prospect
        ,   psp.attributs...
        ,   aum.attributs...
        ,   obs.attributs...
    FROM    prospects   AS psp
        LEFT JOIN
            (   link_produit    AS lna
            INNER JOIN
                automoto    AS aum
                ON  lna.id_produit = aum.id_automoto
                AND lna.nom = 'AUTOMOTO'
            )   ON  lna.id_prospect = psp.id_prospect
        LEFT JOIN
            (   link_produit    AS ln1
            INNER JOIN
                obseque AS obs
                ON  lno.id_produit = obs.id_obseque
                AND lno.nom = 'OBSEQUE'
            )   ON  lno.id_prospect = psp.id_prospect
    ;
    Mais attention aux cardinalités !
    3 produits AUTOMOTO et 2 produits OBSEQUE pour un prospect => 6 lignes retournées
    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.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Par défaut
    Ok merci pour cette réponse.
    Cela semble sous entendre que cela ne serait pas la meilleure solution?

    Il faudrait peux être créer une classe mère produit qui contiendrait les champs en commun de tout les produits et ensuite des tables filles avec en plus les champs qui les différencient?

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Par défaut
    Tu peux faire autant de jointure externe que tu as de tables "produit" différentes. Tu auras par contre à déclarer toutes les colonnes possibles pour toutes les tables et tu auras du NULL pour toutes les colonnes qui ne concernent pas le produit réellement "joint".

    Mais effectivement le modèle n'est pas parfaitement adapté.

    Un modèle plus générique serait plus adapté:

    - une table Produit générique sans colonne propre au "type de produit"
    {IdProduit, libelleProduit, #IdTypeProduit}

    - une table TypeProduit
    {IdTypeProduit, libelleTypeProduit}

    - une table CaracteristiquesTypeProduit
    {IdCaracteristiquesTypeProduit, libelleCaracteristiquesTypeProduit, #IdTypeProduit}

    - une table ValeurCaracteristiqueProduit
    {#IdProduit, #IdCaracteristiquesTypeProduit, Valeur}


    Un trigger peut créer automatiquement les valeurs pour chaque caractéristique associé au type de produit du produit qu'on vient de créer. L'intégrité référentielle avec suppression en cascade peut s'occuper de la suppression des valeurs d'un produit supprimé.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Par défaut
    Avec cette structure pour faire un export de tout les produits souscrits par un prospect notre requête serait plus optimisé et contiendrait qu'une seule jointure?

    C'est cela?

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Par défaut
    Tout à fait.

    De plus les caractéristiques sont "dynamiques" et non pas définies comme colonnes de la table produit.

    Il faut adjoindre à ce "référentiel produit" votre "souscription" :

    T_Souscription = {#IdProspect, #IdProduit}

    La requête qui ramène les souscriptions sous forme "intelligible" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT T_Prospect.IdProspect, T_Prospect.VosAttributs, T_TypeProduit.LibelleTypeProduit T_Produit.LibelleProduit
    FROM T_Prospect
     
    	INNER JOIN T_Souscription 
    		ON T_Prospect.IdProspect = T_Souscription.IdProspect
     
    		INNER JOIN T_Produit 
    			ON T_Produit.IdProduit = T_Souscription.IdProduit
     
    			INNER JOIN T_TypeProduit 
    				T_TypeProduit.IdTypeProduit = T_Produit.IdTypeProduit

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Par défaut
    Merci, j'au du taf pour ces trois jours.

    al1_24-> Je viens de tester ta requête et certains résultats sont bizarres.
    En effet pour certains produits souscrits seul le champ id est renvoyé alors que pour d'autres même non souscrits tout les champs sont renvoyés.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT assanim.*,   automoto.*
    C'est pas possible?

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Par défaut
    vmolines pourrais tu me donner un exemple avec les champs des tables remplis?
    En effet j'ai du mal a saisir la subtilité de certaines tables.

    Merci bien.

Discussions similaires

  1. Réponses: 6
    Dernier message: 27/11/2014, 16h12
  2. Réponses: 1
    Dernier message: 15/03/2012, 09h56
  3. requête pour exporter une base de donnée
    Par miage2 dans le forum Requêtes
    Réponses: 4
    Dernier message: 19/01/2010, 14h47
  4. Réponses: 6
    Dernier message: 06/08/2008, 15h25
  5. aide pour exporter une base de donnée
    Par matt55 dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 06/04/2004, 14h28

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