2010-11-29 28 views
1

1) Quelles sont les requêtes récursives? 2) Sont-ils dangereux? 3) Comment puis-je faire une requête récursive pour me donner les résultats deLignes de requête récursives sur une seule colonne?

ID Date 
1 10/10/2010 
1 20/10/2010 
1 20/10/2010 
2 11/10/2010 
2 22/10/2010 

à

ID Dates 
    1 10/10/2010,20/10/2010,20/10/2010 
    2 11/10/2010,22/10/2010 

4) Pouvez-vous expliquer comment fonctionne récursion dans la requête? J'ai googlé mais je n'arrive pas à comprendre comment fonctionne la récursivité. Ma base de données est DB2 ISeries V5R4.

+0

Vous vous demandez de faire pivoter, non récursivité – smirkingman

+0

oui, je ne comprends pas vraiment sa question. Il n'y a aucune exigence et il y a beaucoup de façons de trouver son résultat – vodkhang

Répondre

1

La requête récursive est une requête SQL qui peut effectuer un calcul récursif. En d'autres termes, il peut utiliser les résultats de lui-même pour continuer la requête. Voici une description abstraite:

1/ ancestor (x, y) = parent (x, y) 

2/ ancestor (x, y) = parent (x, z) && ancestor (Z, Y). 

Il peut être compris dans une brève manière que vous la liste de tous ancêtre de Z, vous listez tous ses parents et ensuite tous les parents de ces parents ...

par exemple, si vous avez une table de famille avec 2 colonnes parent et enfant comme celui-ci:

pkey char 1 not null primary key 
ckey char 1 not null primary key 

('A','B') 
('A','C') 
('A','D') 
('C','E') 
('D','A') 
('D','E') 
('D','F') 
('F','G') 

le handside gauche est parent et le côté droit est celui des enfants. Maintenant, vous voulez trouver tous les descedants de A alors voici quelques code:

with parent_ctl (ckey) as 
(
select ckey 
    from parents 
     where pkey='A' 
UNION ALL 
select c.ckey 
    from parents C, parent_ctl P 
     where P.ckey = C.Pkey 
) 
select ckey from parent_ctl; 
+0

Merci pour le répondant. Que se passe-t-il si je souhaite répertorier toutes les valeurs de la deuxième colonne de l'enregistrement avec l'ID 'A' dans une seule colonne comme 'A' - 'B, C, D'? –

+0

Quel est l'ordre de la requête qui est exécutée? D'abord la requête parent, puis tous les résultats de UNION tous, est-ce l'ordre correct? –

+0

Je vais essayer de vous donner un résumé, mais c'est un peu beaucoup à ce sujet. Je n'ai pas vraiment la première question. Ma requête devrait bien faire le travail, n'est-ce pas? L'ordre est que vous exécutez d'abord la requête du haut pour sélectionner tous les enfants directs. DB enregistre les données dans un endroit appelé D, puis il utilise D pour générer le prochain enfant direct de D appelé E, alors D et E sont unis. Continuez le processus jusqu'à ce que la requête ci-dessous UNION ALL retourne vide set – vodkhang