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 :

[Access 2003] Probleme avec une association reflexive


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 74
    Points : 29
    Points
    29
    Par défaut [Access 2003] Probleme avec une association reflexive
    bonjour tout le monde

    j'ai un gros probléme pour trouver la requete sql a faire dans le cas suivant :

    je dois gerer des familles et des sous-familles d'articles d'un café-restaurant

    exemple : l'article steak fait partie de la sous-famille viandes,qui elle-même

    fait partie de la famille restauration

    et une sous-famille peut faire partie de plusieures familles

    j'ai donc pensé a creer une association reflexive de cette maniere :

    FAMILLE (id_famille, libelle_famille)

    SOUS_FAMILLE(id_famille_mere, id_famille_fille)

    (a comprendre : id_famille_fille est sous famille de id_famille_mere)

    et deux associations 0..* :

    - une de id_famille_mere de SOUS FAMILLE vers id_famille de FAMILLE
    - une de id_famille_fille de SOUS FAMILLE vers id_famille de FAMILLE


    apres,je suis bloqué je ne vois pas comment faire en SQL pour

    1) afficher mes familles avec leurs sous-familles respectives

    2) afficher une seule des Famille avec ses sous-familles respectives

    j'ai essayé de chercher du coté d'une auto-jointure en SQL , mais je ne trouve

    pas

    PS : je travaille ici sous Microsoft Access 2003


    merci a tous d'avance pour votre aide en tout cas

  2. #2
    Membre éclairé Avatar de BizuR
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    688
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 688
    Points : 757
    Points
    757
    Par défaut
    J'opterai pour les requetes suivantes :

    Afficher toutes les familles avec leurs sous familles respectives :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select fam1.libelle, fam2.libelle 
    from famille fam1, famille fam2, sousfamille sfam 
    where sfam.id_mere=fam1.id_famille 
    and sfam.id_fille = fam2.id_famille 
    order by fam1.libelle
    Afficher les sous famille d'une famille particuliere :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select fam1.libelle, fam2.libelle 
    from famille fam1, famille fam2, sousfamille sfam 
    where sfam.id_mere=fam1.id_famille 
    and sfam.id_fille = fam2.id_famille 
    and fam1.libelle = #value#
    Et voila, en eseprant que cela fonctionne

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 74
    Points : 29
    Points
    29
    Par défaut impecc bizur ;)
    impeccable bizur , tu rox comme toujours

    que ferais-je sans toi

    par contre,si je peut me permettre

    le gerant du café,quand il va vouloir ajouter :

    1) une nouvelle famille

    ou

    2) une nouvelle sous-famille à une famille

    ou

    3) une nouvelle sous-famille dans une sous-famille existante

    comment devrais-je proceder :

    1) pour lui presenter la chose

    et

    2) pour faire mes inserts dans les tables

    et derniere petite chose , on dit toujours que c'est mieux d'utiliser

    des jointures que des select et where

    c'est possible de transposer tes 2 requetes la sous forme de jointure ?

    si oui,comment ?



    merci d'avance pour ta réponse

  4. #4
    Membre éclairé Avatar de BizuR
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    688
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 688
    Points : 757
    Points
    757
    Par défaut
    Je te proposerai bien de lui soumettre des listes (une pour sous familles et une pour "sur familles"). Il donne un nom à sa famille et choisis dès lors (selection multiple ou bien bascule entre deux listes.

    Une fois les choix faits. un insert dans FAMILLE pour ajouter la famille créée. Et des insert dans SOUS FAMILLE pour mettre en place la hierarchie. Ainsi, on aurait, je pense, Des insert formatés de la sorte pour chaque sous famille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO SOUS FAMILLE(id_famille_creee,id_sous_famille_choisie)
    et pour les sur famille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO SOUS FAMILLE(id_sur_famille_choisie,id_famille_creee)
    Par contre je ne vois pas ce que tu entends par jointure plutot que select ... where ..., il me semble que mes requetes SQL fonctionne déjà sous forme de jointures... seulement il n'y a point de INNER JOIN ou OUTER JOIN, c'est sur ... mais a la fois normal puisque je n'utilise jamais de BDD comme Access ou SQLServer ... mais plutot Oracle qui ne fonctionne pas avec ces formulations (enfin, je ne les ai jamais utilisées surtout )

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 74
    Points : 29
    Points
    29
    Par défaut
    merci encore bizur

    oui tout a fais,quand je parle de jointure , je parlais de inner join,outer join,etc ...

    mais bon,c est vrai que ca marche nickel avec les select..where

    aussi,une autre question

    j'ai une clé étrangere FK_FAMILLE dans ma table articles

    si je prends par exemple un article tels que : Steak

    sa FK_FAMILLE pointera sur Viandes ou sur Restauration ?

    je suppose que c'est sur Viande,et donc sur une sous-famille de la famille

    restauration ?

    merci encore pour ton aide précieuse en tout cas

  6. #6
    Membre éclairé Avatar de BizuR
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    688
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 688
    Points : 757
    Points
    757
    Par défaut
    Oui, tu pointes les articles normalement vers les familles qui n'ont pas de sous familles (donc famille de niveau hierarchique le plus bas)... ici viande a une sur famille restauration mais pas de sous famille, donc le steak pointe vers viande.

    Bonne continuation

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 74
    Points : 29
    Points
    29
    Par défaut
    bon,apparement j'ai un autre petit probleme pour pouvoir afficher

    les articles d'une famille ou d'une sous-famille

    par exemple ici,j'essaye d'afficher les articles de la sous-famille TOASTS qui elle-meme appartiens a la famille PETITE RESTAURATION

    j'ai donc essayer de créer une sous-requetes comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT ARTICLES.Nom_Articles FROM ARTICLES
    where FK_FAMILLE
    IN ( SELECT fam1.Famille_Nom, fam2.Famille_Nom
    FROM familles AS fam1, familles AS fam2, [sous-familles] AS sfam
    WHERE sfam.id_Famille_mere=fam1.famille_id 
    and sfam.id_famille_fille = fam2.famille_id 
    and fam1.Famille_Nom = 'TOASTS' )
    et access me réponds ceci :

    " You have written a subquery that can return more than one field without using the EXISTS reserved word in the main query's FROM clause.
    Revise the SELECT statement of the subquery to request only one field. "
    d'après mes connaissances en anglais je traduirais ceci comme cela :

    " vous avez écrits une sous-requête qui peut renvoyer plus d'un champs sans utiliser le mot réservé 'EXISTS' dans la clause 'FROM' de la requête principale.
    Modifiez la définition du 'SELECT' de la sous-requête pour n'afficher qu'un seul champs. "
    donc,voila,help please

    et merci a tous d avance

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 74
    Points : 29
    Points
    29
    Par défaut
    bon ben voila , c'est résolu , je cloture ce post

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme avec une association ternaire
    Par zoubab dans le forum Schéma
    Réponses: 2
    Dernier message: 16/04/2008, 21h41
  2. Probleme avec une classe d'association
    Par bassim dans le forum UML
    Réponses: 7
    Dernier message: 18/04/2007, 14h42
  3. Réponses: 5
    Dernier message: 12/03/2007, 10h21
  4. [Access] problème avec une sous-requête
    Par dirtyjs dans le forum Langage SQL
    Réponses: 12
    Dernier message: 09/11/2006, 22h26
  5. [Access] probleme avec une sous-requête synchronisée
    Par dirtyjs dans le forum Langage SQL
    Réponses: 1
    Dernier message: 11/09/2006, 16h44

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