2017-12-09 5 views
0

Ich habe das folgende Szenario:Verwenden Sie UPDATE-Anweisung in einem CTE-Ausdruck SQL

Ich habe Tickets (= Vorfälle), die mehrere Aktivitäten haben.

Ein Vorfall jedoch kann ein Kind Ticket (+ grand Kinderticket) und so weiter:

enter image description here

Deshalb, was ich tun möchte, ist, alle Aktivitäten der (Enkel- hinzufügen) Kinder, zu denen seiner Eltern. So

:

enter image description here

Ich begann mit allen Unterelementen eines einzigen Ticket abzurufen, habe ich einen CTE dafür:

With TicketTree(iID, pID) 
as 
(
    Select incidentID, parentID FROM incident where incidentID = 1 
    UNION ALL 
    SELECT incidentID, parentID FROM incident INNER JOIN TicketTree R on parentID = R.iID 
) 
Select * from TicketTree 
JOIN activity on TicketTree.iID = activity.incidentID 

Die Abfrage funktioniert und ruft alle die Unterfälle.

Meine Frage ist jetzt, ist es möglich, UPDATE die Aktivitätstabelle und die incidentID aller Kinder auf die eine der Eltern (mit einer Abfrage) zu setzen?

Ich habe versucht:

UPDATE activity 
set incidentID = 1 
WHERE incidentID IN(
Select iID from TicketTree 
JOIN activity on TicketTree.iID = activity.incidentID 
) 

Es sagt mir, dass 11 Zeilen betroffen waren aber die Aktivitäten der Kinder nicht ändern?

Was mache ich falsch?

Antwort

0

Sie können etwas tun:

With TicketTree(iID, pID) as (
     Select incidentID, parentID FROM incident where incidentID = 1 
     UNION ALL 
     SELECT incidentID, parentID FROM incident INNER JOIN TicketTree R on parentID = R.iID 
    ) 
update activity 
    set incidentID = 1 
    where incidentID in (select iID in TicketTree); 
+0

aber das Problem ist, dass ich die Aktivitätstabelle (und nicht der Vorfall Tabelle) aktualisiert werden soll: / – user3127554

Verwandte Themen