Table BG_EXPENSE
Expense_id เป็น Primary key
Parent_id เป็น id โหนดแม่
Is_leaf เป็น Flag บอกว่าโหนดนี้เป็นตัวสุดท้ายใน Tree หรือก็คือเป็นใบแล้วนั้นเอง
สร้าง With ขึ้นมาเพื่อทำการ Recursive Query
WITH RPL ( IS_LEAF,EXPENSE_ID, PARENT_ID) AS(SELECT ROOT.IS_LEAF,ROOT.EXPENSE_ID, ROOT.PARENT_ID
FROM BG_EXPENSE ROOT
WHERE ROOT.EXPENSE_ID = 191
UNION ALL
SELECT CHILD.IS_LEAF,CHILD.EXPENSE_ID, CHILD.PARENT_ID
FROM RPL PARENT, BG_EXPENSE CHILD
WHERE PARENT.EXPENSE_ID = CHILD.PARENT_ID)
ถ้าต้องการดึงโหนดแม่ แทนการดึงโหนดลูก ให้เปลี่ยน EXPENSE_ID กับ PARENT_ID สลับที่กันใน WHERE PARENT.EXPENSE_ID = CHILD.PARENT_ID
เมื่อสร้าง With แล้วให้ดึงด้วย Select เพื่อดึงข้อมูลออกมาใช้ตามต้องการ
SELECT DISTINCT o1.IS_LEAF,o1.EXPENSE_ID, o1.PARENT_ID
FROM RPL o1
WHERE o1.IS_LEAF = 'Y'
สรุปเขียน SQL ได้ว่า
WITH RPL ( IS_LEAF,EXPENSE_ID, PARENT_ID) AS
(SELECT ROOT.IS_LEAF,ROOT.EXPENSE_ID, ROOT.PARENT_ID
FROM BG_EXPENSE ROOT
WHERE ROOT.EXPENSE_ID = 191
UNION ALL
SELECT CHILD.IS_LEAF,CHILD.EXPENSE_ID, CHILD.PARENT_ID
FROM RPL PARENT, BG_EXPENSE CHILD
WHERE PARENT.EXPENSE_ID = CHILD.PARENT_ID)
SELECT DISTINCT o1.IS_LEAF,o1.EXPENSE_ID, o1.PARENT_ID
FROM RPL o1
WHERE o1.IS_LEAF = 'Y'
ไม่มีความคิดเห็น:
แสดงความคิดเห็น