2010-10-22 16 views
2

J'ai une table qui contient les champs suivantsrequête récursive

  • Supervisorid
  • EMPID

Ceci est juste comme un programme de référence. Un gars peut se référer 3 gars sous lui, soit 3 fait référence à trois gars à savoir 4 5 8 de même 4 fait référence 9 10 et 11 de même 8 fait référence 12, 13 ça va comme ça ..

Je veux une requête pour obtenir tout EmpId sous Superviseur 3

+0

I.e. vous voulez avoir 4,5,8,9,10,11,12,13, non? – phimuemue

+0

Peut-être que cela pourrait vous aider: http://stackoverflow.com/questions/53108/is-it-possible-to-make-a-recursive-sql-query – phimuemue

+0

duplication possible de [Sql Server2005 requête problème] (http://stackoverflow.com/questions/3993927/sql-server2005-query-problem) –

Répondre

3

Voulez-vous que nous écrivions la solution pour vous, ou expliquions-nous un peu comment des requêtes récursives peuvent être créées? Un exemple de la façon dont ils sont construits est le http://publib.boulder.ibm.com/infocenter/db2luw/v8//topic/com.ibm.db2.udb.doc/ad/samples/clp/s-flt-db2.htm.

Le livre rouge IBM DB2 contient un chapitre complet sur la récursivité SQL.

L'essentiel est que les étapes suivantes sont généralement impliqués:

  • vous définissez une « graine ». CHOISIR SUPID, EMPID, 1 COMME LVL DE EMP O WH SUPID = 3;

  • vous lui attribuez un nom. AVEC SRC COMME < votre graine ici >

  • Vous définissez la façon d'aller au 'niveau suivant', en commençant par la graine, en utilisant le nom assigné. SELECT SRC.SUPID, F.EMPID, SRC.LVL + 1 DE SRC, EMP OÙ SRC.EMPID = EMP.SUPID

  • vous combinez les deux ensemble (à l'intérieur de la clause WITH) AVEC SRC AS < ta postérité ici > UNION ALL < l'autre SELECT ici >

  • (facultativement) vous définissez les colonnes à sélectionner. SELECT EMPID, LVL DE SRC.