2016-05-26 2 views
1

Ich möchte die vollständigen Knoten aus vorhandenen rekursiven Kategoriebaum erhalten, wenn die Produkttabelle eine passende Kategorie hat.So finden Sie einen vollständigen Knoten in einer rekursiven SQL-Abfrage

Ich habe folgendes.

WITH ret AS (
     SELECT ID, ParentID, ProductCategoryId, ProductCategoryName 
     FROM ProductCategoryTree as p1, Products as p2 
     WHERE p1.ProductCategoryId = p2.ProductCategoryId 
     UNION ALL 
     SELECT p.ID, p.ParentID, p.ProductCategoryId, p.ProductCategoryName 
     FROM ProductCategoryTree as p INNER JOIN 
       ret r ON p.ParentID = r.ID 
    ) 
SELECT DISTINCT ID, ParentID, ProductCategoryId, ProductCategoryName 
FROM ret; 

Dies wird die Kategorie des Produkts geben Sie mir und alle untergeordneten Knoten dieser Kategorie, aber ich müsste auch die Kategorie erhalten (oder Kategorien) von der oberen Ebene (n).

Jede Hilfe wäre sehr willkommen!

+0

Welche Datenbank verwenden Sie? Was passiert, wenn Sie die Eltern-Kind-Relation beim letzten Join umkehren: "ret r ON p.ID = r.ParentID"? –

+0

Hallo Tamas, es ist SQL Server. Ich habe deinen Vorschlag getestet und nach ersten Tests denke ich, dass es den Trick geschafft hat! So einfach, aber effektiv :) Vielen Dank. – punatiainen

Antwort

0

Wie wir in den Kommentaren diskutiert, Reverse Sie nur die Eltern-Kind-Beziehung in der letzten Zeile des beizutreten, und es wird funktionieren:

ret r ON p.ParentID = r.ID 
Verwandte Themen