INSERT INTO Famille VALUES
(1, 'A', 'Animaux vivants')
, (2, 'P', 'Produits d''origine animale')
, (3, 'PP', 'Végétaux et produits végétaux')
, (4, 'D', 'Produits destinés à l''alimentation animale')
;
SELECT '' AS Famille, * FROM Famille ;
INSERT INTO Nomenclature VALUES
(1, 2) -- nomenId familleId
, (2, 2) -- viande
, (3, 2) -- viande
, (4, 3) -- vegetal
, (5, 3) -- vegetal
, (6, 3) -- vegetal
;
SELECT '' AS Nomenclature, * FROM Nomenclature ;
INSERT INTO NomenclatureViande VALUES
(1, 1, 'Viande V1') -- nomenclatureId, nomenId, libellé
, (2, 2, 'Viande V2')
, (3, 3, 'Viande V3')
;
SELECT '' AS NomenclatureViande, v.*, FamilleLibelle
FROM NomenclatureViande AS v
JOIN Nomenclature AS n ON v.NomenId = n.NomenId
JOIN Famille AS f ON n.FamilleId = f.FamilleId
;
INSERT INTO NomenclatureVegetal VALUES
(1, 4, '1MABG') -- nomenclatureId, nomenId, libellé
, (2, 5, 'SOLTU')
, (3, 6, 'LYPES')
;
SELECT '' AS NomenclatureVegetal, v.*, FamilleLibelle
FROM NomenclatureVegetal as v
JOIN Nomenclature AS n ON v.NomenId = n.NomenId
JOIN Famille AS f ON n.FamilleId = f.FamilleId
;
INSERT INTO Marchandise VALUES
(1, 2, 'M1') -- MarchandiseId, FamilleId, libelle
, (2, 2, 'M2') -- marchandise viande
, (3, 3, 'M3') -- marchandise végétale
, (4, 2, 'M4') -- marchandise viande
, (5, 3, 'M5') -- marchandise végétale
, (6, 3, 'M6') -- marchandise végétale
;
SELECT '' AS Marchandise, * FROM Marchandise ;
SELECT '' AS Lot, o.*
, m.MarchandiseLibelle
, f.FamilleLibelle
, n.FamilleId AS NomenFamilleId
, f2.FamilleLibelle AS NomenFamilleLibelle
FROM Lot as o
JOIN Marchandise AS m ON m.MarchandiseId = o.MarchandiseId
JOIN Famille AS f on m.FamilleId = f.FamilleId
JOIN Nomenclature AS n ON o.NomenId = n.NomenId
JOIN Famille AS f2 ON n.FamilleId = f2.FamilleId
;
-- Lots de type viande
INSERT INTO Lot VALUES
(1, 1, 1, 15) -- MarchandiseId, LotId, NomenId, Quantite
, (1, 2, 1, 25)
, (1, 3, 1, 36)
, (2, 1, 1, 211)
, (2, 2, 1, 221)
;
SELECT '' AS Lot, o.*
, m.MarchandiseLibelle
, f.FamilleLibelle
, n.FamilleId AS NomenFamilleId
, f2.FamilleLibelle AS NomenFamilleLibelle
FROM Lot as o
JOIN Marchandise AS m ON m.MarchandiseId = o.MarchandiseId
JOIN Famille AS f on m.FamilleId = f.FamilleId
JOIN Nomenclature AS n ON o.NomenId = n.NomenId
JOIN Famille AS f2 ON n.FamilleId = f2.FamilleId
;
INSERT INTO LotViande VALUES
(1, 1) -- MarchandiseId, LotId
, (1, 2)
, (1, 3)
, (2, 1)
, (2, 2)
;
SELECT DISTINCT '' AS LotViande, v.*
, m.MarchandiseLibelle
, f.FamilleLibelle
, n.NomenclatureLibelle
FROM LotViande AS v
JOIN Marchandise AS m ON m.MarchandiseId = v.MarchandiseId
JOIN Famille AS f ON m.FamilleId = f.FamilleId
JOIN Lot AS o ON v.LotId = o.LotId
AND v.MarchandiseId = o.MarchandiseId
JOIN NomenclatureViande AS n ON o.NomenId = n.NomenId
JOIN Nomenclature AS n2 ON n2.FamilleId = f.FamilleId
-- Lots de type Vegetal
INSERT INTO Lot VALUES
(3, 1, 4, 314) -- MarchandiseId, LotId, NomenId, Quantite
, (3, 2, 1, 321)
;
INSERT INTO LotVegetal VALUES
(3, 1, 'bon état') -- MarchandiseId, LotId, Etat
, (3, 2, 'état médiocre') -- MarchandiseId, LotId, Etat
;
SELECT '' AS LotVegetal, v.*
, m.MarchandiseLibelle
, f.FamilleId as FamilleId
, f.FamilleLibelle
, o.NomenId AS NomenId
, n.FamilleId AS NomenFamilleId
FROM LotVegetal AS v
JOIN Marchandise AS m ON m.MarchandiseId = v.MarchandiseId
JOIN Famille AS f ON m.FamilleId = f.FamilleId
JOIN Lot AS o ON v.LotId = o.LotId
AND v.MarchandiseId = o.MarchandiseId
JOIN Nomenclature AS n ON o.NomenId = n.NomenId
;
Il se trouve que le lot pour lequel MarchandiseId = 3 et LotId = 1 fait référence (via sa famille) à la famille "Produits d'origine animale", mais ce lot fait par ailleurs référence à une nomenclature faisant elle-même référence à la famille "Végétaux et produits végétaux".
Partager