*参照 [#pa70228e] **パスを取得する [#d8927fba] **子を取得する [#o31531ca] **部分木を取得する [#s3f68511] *更新 [#xe16fc23] **リーフを追加する [#q27c73c3] -''object''を''target''下に UPDATE 02_DIRECTORY Target INNER JOIN 02_DIRECTORY Shift ON Shift.R >= Target.R SET Shift.R = Shift.R + 2 , Shift.L = CASE WHEN Shift.L > Target.L THEN Shift.L + 2 ELSE Shift.L END WHERE Target.DIRECTORY_ID = :target; INSERT INTO 02_DIRECTORY SELECT :object, R-2 AS L, R-1 AS R FROM 02_DIRECTORY WHERE DIRECTORY_ID = :target; **部分木を移動する [#i6b4bcc8] -''object''を''target''下に UPDATE 02_DIRECTORY Target INNER JOIN 02_DIRECTORY Shift ON Shift.R >= Target.R INNER JOIN 02_DIRECTORY Object ON Object.DIRECTORY_ID = :object SET Shift.R = Shift.R + (Object.R - Object.L + 1) , Shift.L = CASE WHEN Shift.L > Target.L THEN Shift.L + (Object.R - Object.L + 1) ELSE Shift.L END WHERE Target.DIRECTORY_ID = :target; UPDATE 02_DIRECTORY Target INNER JOIN 02_DIRECTORY Object ON Object.DIRECTORY_ID = :object INNER JOIN 02_DIRECTORY Shift ON Shift.L >= Object.L AND Shift.R <= Object.R SET Shift.R = Shift.R + (Target.R - 1 - Object.R) , Shift.L = Shift.L + (Target.R - 1 - Object.R) WHERE Target.DIRECTORY_ID = :target;