Ich bin ein Zustandsdiagramm der Art zu schaffen, wobei die Daten in einer einfachen Selbst referenzierenden Tabelle gespeichert werden (JobPath)rekursive Abfrage auf einer selbst referentiellen Tabelle (nicht hierarchisch)
JobId - ParentJobId
I war ein Standard-SQL CTE Verwendung zu erhalten, die Daten aus dem funktioniert perfekt, bis ich mit den folgenden Daten
JobId - ParentId
1 2
2 3
3 4
4 2
Jetzt endete, wie Sie Job 4 Links zu Job 2, die Arbeit geht 3 und dann auf Job 4 und so weiter sehen können.
Gibt es eine Möglichkeit, kann ich meine Abfrage sagen, Daten nicht zu ziehen, die es bereits hat?
Hier ist meine aktuelle Abfrage
WITH JobPathTemp (JobId, ParentId, Level)
AS
(
-- Anchor member definition
SELECT j.JobId, jp.ParentJobId, 1 AS Level
FROM Job AS j
LEFT OUTER JOIN dbo.JobPath AS jp
ON j.JobId = jp.JobId
where j.JobId=1516
UNION ALL
-- Recursive member definition
SELECT j.JobId, jp.ParentJobId, Level + 1
FROM dbo.Job as j
INNER JOIN dbo.JobPath AS jp
ON j.JobId = jp.JobId
INNER JOIN JobPathTemp AS jpt
ON jpt.ParentId = jp.JobId
WHERE jp.ParentJobId <> jpt.JobId
)
- Erklärung, die den CTE
Server beitreten unterstützt keine UNION mitSELECT * FROM JobPathTemp
Wie sieht Ihre Abfrage aus? Kannst du Distinct nicht benutzen? – Kell
"DISTINCT-Operator ist im rekursiven Teil eines rekursiven allgemeinen Tabellenausdrucks 'JobPathTemp' nicht erlaubt." –