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

Développement SQL Server Discussion :

Recherche des parrent dans une table


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut Recherche des parrent dans une table
    Bonjour à tous.

    Je dois faire un annuaire tout simple et je bute sur la recherche des catégories.

    Ma table est faite ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    CREATE TABLE [dbo].[CORE_Annuaire_Categorie](
    	[IdCategorie] [int] IDENTITY(1,1) NOT NULL,
    	[NomCategorie] [varchar](100) NULL CONSTRAINT [DF_CORE_Annuaire_Categorie_NomCategorie]  DEFAULT (''),
    	[Description] [varchar](500) NULL CONSTRAINT [DF_CORE_Annuaire_Categorie_Description]  DEFAULT (''),
    	[CategorieParent] [int] NULL CONSTRAINT [DF_CORE_Annuaire_Categorie_CategorieParent]  DEFAULT ((0))
    ) ON [PRIMARY]
    Je voudrais créer une requête qui va prendre en paramettre une catégorie donnée et me remonter tous ses parents.

    Et là, je sèche.

    Vous pouvez m'aider ?

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Tout d'abord il manque la contrainte de clé primaire et de clé étrangère réflexive à votre table
    Rajoutons-les :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ALTER TABLE dbo.CORE_Annuaire_Categorie
    ADD CONSTRAINT PK_CORE_Annuaire_Categorie PRIMARY KEY (IdCategorie)
    GO
     
    ALTER TABLE dbo.CORE_Annuaire_Categorie
    ADD CONSTRAINT FK_CORE_Annuaire_Categorie FOREIGN KEY (CategorieParent) REFERENCES dbo.CORE_Annuaire_Categorie(IdCategorie)
    Ensuite si vous êtes sous SQL Server 2005 ou 2008, vous pouvez utiliser une expression de table commune récursive pour résoudre votre problème.

    Peuplons la table :

    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
    INSERT INTO dbo.CORE_Annuaire_Categorie
    (
    	NomCategorie,
    	Description,
    	CategorieParent
    )
    VALUES('Transport', 'Tous les moyens de transport', NULL),
    	('Terrestre', 'Tous les moyens de transport terrestres', 1),
    	('Voiture', 'Véhicule léger à 4 roues', 2),
    	('Camion', 'Véhicule lourd à 4 roues ou plus', 2),
    	('Motocyclette', 'Véhicule léger à 2 roues', 2),
    	---
    	('Maritime', 'Tous les moyens de transport par voie d''eau', NULL),
    	('Barque', 'Bâteau pouvant embarquer 4 personnes au plus', 5),
    	('Bâteau de plaisance à moteur', 'Bâteau pouvant embarquer 10 personnes au plus, doté d''un moteur', 5),
    	('Bâteau de plaisance à voile', 'Bâteau pouvant embarquer 10 personnes au plus, doté d''une voile et d''un moteur', 5)
    Et supposons que nous cherchons tous les "parents" de 'Motocyclette' :

    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
    21
    DECLARE @maCategorie VARCHAR(64) = 'Motocyclette'
     
    ;WITH
    	CTE AS
    	(
    			SELECT CategorieParent,
    				NomCategorie,
    				0 AS NiveauHierarchie
    			FROM dbo.CORE_Annuaire_Categorie
    			WHERE NomCategorie = @maCategorie
    		UNION ALL
    			SELECT A.CategorieParent,
    				A.NomCategorie,
    				C.NiveauHierarchie + 1
    			FROM dbo.CORE_Annuaire_Categorie AS A
    			JOIN CTE AS C
    				ON C.CategorieParent = A.IdCategorie
    	)
    SELECT NomCategorie,
    	NiveauHierarchie
    FROM CTE
    Retourne :
    NomCategorie NiveauHierarchie
    ---------------------------------
    Motocyclette 0
    Terrestre 1
    Transport 2
    @++

  3. #3
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Génial, merci, merci beaucoup.

    C'est exactement ce qu'il me fallait.

    Bonne journée

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

Discussions similaires

  1. [AC-2010] Rechercher, modifier des données dans une table liée
    Par texas2607 dans le forum VBA Access
    Réponses: 3
    Dernier message: 15/04/2015, 15h28
  2. Rechercher des intervalles dans une table
    Par Allegro dans le forum Requêtes
    Réponses: 11
    Dernier message: 11/12/2012, 21h42
  3. recherche Date nulle dans une table
    Par lol_adele dans le forum Bases de données
    Réponses: 6
    Dernier message: 16/04/2004, 14h06
  4. Ordre des champs dans une table
    Par patapetz dans le forum Outils
    Réponses: 5
    Dernier message: 30/07/2003, 06h53
  5. Recherche de donnee dans une table associée
    Par josoft dans le forum Requêtes
    Réponses: 2
    Dernier message: 14/07/2003, 15h22

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