การทำงานกับ recursive queries

Hierarchical and Recursive Queries in SQL Server

Jasmin Ludolf

Content Developer

ลำดับชั้นขององค์กร IT

ข้อมูลองค์กรประกอบด้วย:

  • ID - รหัสพนักงาน
  • Name ชื่อพนักงาน
  • JobTitle ตำแหน่งในบริษัท
  • Department แผนกในบริษัท
  • Supervisor หัวหน้างานในบริษัท

ฟิลด์ที่ใช้อธิบายลำดับชั้น:

  • ID
  • Supervisor

พนักงาน 2 มีหัวหน้าคือพนักงาน 1

Hierarchical and Recursive Queries in SQL Server

องค์กร IT

+-----------------------+---------------------+------------+------------+
|ID | Name              | Position            | Department | Supervisor |    
|-----------------------|---------------------|------------|------------|
| 1 | Heinz Griesser    | IT Director         | IT         | 0          |
| 2 | Andreas Sitter    | Security Manager    | IT         | 1          |
| 3 | Thomas Bergman    | Innovation Manager  | IT         | 1          |
| 4 | Hannes Berg       | Operation Manager   | IT         | 1          |
| 5 | Anna Kruggel      | Administrator       | IT         | 4          |
| 6 | Karin Pacher      | Developer           | IT         | 4          |
+-----------------------+---------------------+------------+------------+
Hierarchical and Recursive Queries in SQL Server

งานทั่วไปสำหรับข้อมูลเชิงลำดับชั้น

ดึงลำดับชั้นของระเบียน

หัวหน้าของคุณคือใคร?


ดึงระดับของลำดับชั้น

ระบุระดับลำดับชั้นขององค์กร


รวมผลลัพธ์ recursion ไว้ในฟิลด์เดียว

ฉันมีหัวหน้าคนใดบ้าง?

Hierarchical and Recursive Queries in SQL Server

ดึงลำดับชั้น

WITH hierarchy AS (
    SELECT ID,Supervisor
        FROM employee 
        WHERE supervisor = 0

UNION ALL SELECT emp.ID, emp.Supervisor FROM employee emp
JOIN hierarchy ON emp.Supervisor = hierarchy.ID) SELECT * FROM hierarchy
Hierarchical and Recursive Queries in SQL Server

ดึงลำดับชั้น

+---+-----------+
|ID |Supervisor |
|---|-----------|
|1  | 0         |
|2  | 1         |
|3  | 2         |
+---+-----------+
Hierarchical and Recursive Queries in SQL Server

ดึงระดับของลำดับชั้น

WITH hierarchy AS (
    SELECT ID, Supervisor, 1 as LEVEL
        FROM employee
           WHERE Supervisor = 0

UNION ALL SELECT emp.ID, emp.Supervisor, LEVEL + 1 FROM employee emp
JOIN hierarchy ON emp.Supervisor = hierarchy.ID ) SELECT * FROM hierarchy
Hierarchical and Recursive Queries in SQL Server

ดึงระดับของลำดับชั้น

+---+-----------+-------|
|ID |Supervisor | Level |
|---|-----------|-------|
|1  | 0         | 0     |
|2  | 1         | 1     |
+---+-----------+-------+
Hierarchical and Recursive Queries in SQL Server

รวมผลลัพธ์ recursion ไว้ในฟิลด์เดียว

WITH hierarchy AS (
    SELECT ID, Supervisor, CAST('0' AS VARCHAR(MAX)) as PATH
        FROM employee
        WHERE Supervisor = 0

UNION ALL SELECT emp.ID, emp.Supervisor, Path + '->' + CAST(emp.Supervisor AS VARCHAR(MAX)) FROM employee emp INNER JOIN hierarchy ON emp.Supervisor = hierarchy.ID ) SELECT * FROM hierarchy
Hierarchical and Recursive Queries in SQL Server

รวมผลลัพธ์ recursion ไว้ในฟิลด์เดียว

+-----+--------+
| PATH         |
|--------------|
| 0 -> 1 -> 4  |
+-----+--------+
Hierarchical and Recursive Queries in SQL Server

มาฝึกกันเถอะ!

Hierarchical and Recursive Queries in SQL Server

Preparing Video For Download...