Bonjour à tous,
Dans le cadre de la gestion d'un catalogue, nous recevons une table des produits (product), une table de catégorie de produit (Category) qui associe le produit à une catégorie (par exemple un portable est dans la catégorie notebook).
En parallèle, nous avons une table qui contient l’arborescence de toutes les catégories du catalogue(ParentCategory).
Nous gérons que certains produits et donc certaines catégories. Du coup une partie de l'arborescence que nous recevons est inutile. Par exemple, nous gérons principalement du parc pc et nous avons dans l'arborescence de la table à repasser ou de la tondeuse à barbe.
J’essaie donc de ne sélectionner que la partie utile de l'arborescence.
prenant un exemple concret:
ParentCategory
parentCategoryId CategoryId 1 1 1 2 1 3 1 6 2 4 4 5 3 7 6 8 8 9
Je ne gère que des produits qui ont la catégorie 5.
Le résultat voulut est donc :
parentCategoryId CategoryId 1 2 2 4 4 5
En SQL direct je récupérè le résultat suivant:
parentCategoryId CategoryId 1 1 1 2 1 3 1 6 2 4 4 5 6 8
Je garde donc les catégories parents de catégories que je ne gère pas.
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 ;with parentCategory(ParentCategoryId,CategoryId) as (select 1,1 Union select 1,2 Union select 1,3 Union select 1,6 Union select 2,4 Union select 4,5 Union select 3,7 Union select 6,8 Union select 8,9 ) ,CategoryGere as(select 5 CategoryId ) select distinct PC.* from ParentCategory PC left join ParentCategory enf on enf.ParentCategoryId= PC.CategoryId left join CategoryGere C on PC.CategoryId=C.CategoryId where enf.CategoryId is not null or (enf.CategoryId is null and C.CategoryId is not null)
Je ne suis pas à l'aise avec la notion de récursivité en sql. et j'ai du mal à l'appliquer à mon cas.
Auriez vous une piste pour résoudre mon problème?
Merci d'avance.
Partager