-
1 pièce(s) jointe(s)
SQL - table mère-filles
bonjour le groupe,
je bute sur une requête SQL pour extraire un prix global.
CONTEXTE : 2 tables, la première est l'inventaire de tout le magasin [T_MATERIAUX_MASTER] ; la deuxième est une table de jonction [T_JCT] pour les items "mère" avec ses "filles" et leurs quantités
Dans la table inventaire, j'ai un champ qui défini si l'item possède des enfants [T_MATERIAUX_MASTER.[JCT_VERS_FILLES]] (OUI/NON)
OBJECTIF : obtenir le prix de l'item "mère" (somme des quantités "filles" * prix)
Ci-joint, une vue de mes différentes tables (pas réaliste pour la requête, mais le visuel parle mieux)
Pièce jointe 619517
Merci de votre aide.
-
2 pièce(s) jointe(s)
Bonjour,
Visiblement, nous sommes ici sous ACCESS puisque le clone T_MATERIAUX_MASTER_1 est une aberration spécifique à ce SGBD qui ne sait pas représenter proprement une association reflexive.
Plusieurs choses ne vont pas dans le modèle de données.
T_JCT est ce qu'on appelle une table associative, car elle est issue d'une association reflexive du modèle conceptuel : assocation de T_MATERIAUX_MASTER sur elle même
A priori, c'est un cas classique de nomenclature composant/composé.
Ce faisant, T_JCT ne devrait pas avoir d'identifiant propre, la colonne T_JCT.id est donc à virer, sauf si ACCESS exige cette colonne (ce qui serait incongru, mais vu la piètre qualité de ce SGBD ça ne m'étonnerait qu'à moitié). La PK de cette table doit être composée du couple (T_MATERIAUX_MASTER.ID, T_MATERIAUX_MASTER_1.id)
Et il ne faut pas non plus d'attribut JCT_vers_filles ! C'est une redondance avec la présence ou pas d'une foreign key :aie:
Le bon modèle de données (simplifié aux attributs essentiels) est :
Pièce jointe 619522
Ce qui donne les tables suivantes :
Pièce jointe 619523
À partir de là, une requête il faut faire une requête récursive pour récupérer toute la décomposition arborescente d'un composé.
Mais si c'est bien d'ACCESS qu'il s'agit, les requêtes récursives ne sont malheureusement pas possibles, vous n'aurez donc que le premier niveau de composé, par une simple jointure
Si c'est pour un usage privé, vous aurez tout à gagner à remplacer ACCESS par un SGBD moderne, il en existe des gratuits autrement plus performants et riches en fonctionnalités :P.
-
merci pour cette réponse,
en fait, je n'utilise pas Access pour les requêtes (seulement pour stockage des informations), mais ce sont des macros SQL sous Excel qui alimentent/extraient les données. Il y a une dizaine d'utilisateurs, et beaucoup n'ont pas Access.
Je prends note des indications et reformaterai mes tables.