2017-07-16 1 views
0

S'il vous plaît aidez-moi comment obtenir tous les parents pour les soumissions. Si je passe submissionId à la table (mis en évidence en noir), je devrais obtenir tous les parents pour que la soumission (en rouge)Obtenir tous les parents sur la base de la soumission dans SQL Server

enter image description here

de données Exemple:

5EAB0B3D-5A17-43A9-9BC2-21B950F4B4E7 24A6DB20-20D1-4063-9DC6-CC1990B26FD7 
4DEA6377-DF7C-415E-8E06-7DDEB34B53F6 45D6A438-61C7-488C-BC83-8AAB491B037D 
9B83B4D0-E122-462F-842D-9A0A4774A6D5 24A6DB20-20D1-4063-9DC6-CC1990B26FD7 
0BED1600-3120-4C3A-BA86-A3BFAC5765FA 9B83B4D0-E122-462F-842D-9A0A4774A6D5 
DB5DF89E-0E6B-46FE-BE9A-CA6F47F4B544 24A6DB20-20D1-4063-9DC6-CC1990B26FD7 

Requête:

WITH n([submissionid], [parentid]) AS 
(
    SELECT 
     [submissionid], 
     [parentid] 
    FROM 
     [submissionrenewal] 
    WHERE 
     [submissionid] = '0BED1600-3120-4C3A-BA86-A3BFAC5765FA' 

    UNION ALL 

    SELECT 
     m.[submissionid], 
     m.[parentid] 
    FROM 
     [submissionrenewal] AS m, 
     n 
    WHERE 
     n.[submissionid] = m.[parentid] 
) 
SELECT DISTINCT * 
FROM n 

entrée

0BED1600-3120-4C3A-BA86-A3BFAC5765FA 

Sortie

9B83B4D0-E122-462F-842D-9A0A4774A6D5 
24A6DB20-20D1-4063-9DC6-CC1990B26FD7 
+1

Les données post échantillons sous forme de texte .. Ne jamais afficher les données d'échantillon comme image personne ne peut l'utiliser tester le code .. –

+0

posté, des données laissez-moi savoir s'il y a un moyen que je peux l'attacher –

+0

Son assez aussi ajouter le résultat attendu pour les données de l'échantillon .. Entendu sur 'Recursive CTE' dans Sql Server? –

Répondre

2

Vous avez juste besoin de changer la condition de jointure. Parentid de requête d'ancre doit être joint avec submissionid partie récursive. Vous devez échanger simplement le nom d'alias dans where clause m.[submissionid] = n.[parentid]

WITH n([submissionid], [parentid]) -- giving a meaningful CTE name will improve the code readability 
    AS (SELECT [submissionid], 
       [parentid] 
     FROM [submissionrenewal] 
     WHERE [submissionid] = '0BED1600-3120-4C3A-BA86-A3BFAC5765FA' 
     UNION ALL 
     SELECT m.[submissionid], 
       m.[parentid] 
     FROM [submissionrenewal] AS m 
       INNER JOIN n 
         ON m.[submissionid] = n.[parentid]) --here 
SELECT * 
FROM n 

Note: Utilisez toujours INNER JOIN syntaxe au lieu de l'ancienne virgule de style Séparées rejoindre

+0

merci pour l'aide –