Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1675 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  CTE SQL Server

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

CTE SQL Server

n°2121695
discmat
Posté le 16-01-2012 à 18:02:07  profilanswer
 

Hi all,
voici une problématique sur une requete récusive.
Schéma :  
  * des noeuds à niveaux potentiellement infini
  * des feuilles (de type feuille) et qui ont une qualification (un pays).
 
Je veux afficher les arbres complets (le tableau qui représente l'arbre ...) mais seulement pour les arbre qui ont au mois une feuille dans le Pays désiré.
Pour la faire simple le code suivant est utilisé actuellement : Elle part du bas (test de la feuille) pour remonter vers le haut (d'ou le distinct) mais je suis pas sur que ca soit OK la requete tourne en rond car performance pas géniale.
 
Vous auriez une meilleure méthode ou des conseils sur la récursivité  ?
 
merci.
 

Code :
  1. WITH
  2.   cteReports (id, name, fatherId)
  3.   AS
  4.   (
  5.     SELECT acc.id, acc.name, acc.fatherId
  6.     FROM account acc
  7. where acc.type = 'Leaf' and acc.country = 'EXAMPLE'
  8.     UNION ALL
  9.     SELECT acc.id, acc.name, acc.fatherId
  10.     FROM account acc
  11.     INNER JOIN cteReports r
  12.  ON acc.Id = r.fatherId
  13. )
  14. SELECT distinct
  15.   name,
  16.   fatherId,
  17. FROM cteReports
  18. option (maxrecursion 0)


 

mood
Publicité
Posté le 16-01-2012 à 18:02:07  profilanswer
 

n°2121981
Oliiii
Posté le 18-01-2012 à 08:57:49  profilanswer
 

SQL n'est pas fait pour ce genre de requete, il y a moyen d'accelerer le traitement en utilisant d'autres facon de representer une hierarchie mais en general ce n'est simplement pas une bonne idée d'utiliser une represenation hierarchique dans un SGBD relationel.
 
Google est remplis de technique independante du SGBD.
Si tu as la bonne version de SQL tu peux aussi jetter un oeuil du coté du hierarchy_id.
 
Sinon soit bien sur que ta table ai un index sur acc.id et un autre sur acc.fatherId, chaque index doit couvrir au minimum la colonne acc.name, acc.id et acc.fatherId.
Un index sur acc.type et acc.country peut aussi aider.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  CTE SQL Server

 

Sujets relatifs
Livre pour prépa concours SGBD / SQL : Vos avis sur livre d'Audibert ?Interrogation SQL avec une période de dates
pb de connexion SQL/ODBC via PHPExport données MS SQL vers csv avec PHP
Impossible de lancer SQL Server AgentVmware et SQL Server
Recherche cours perfectionnement SQLMCD/MLD, req algébrique/ req SQL, exercice de base
Plus de sujets relatifs à : CTE SQL Server


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR