Lấy tất cả các Parent có thể trong một trường?
Nhiệm vụ cuối cùng trong chương này là tìm tất cả các Parent có thể bắt đầu từ một ID và gộp các ID của mọi thế hệ tìm được vào một trường duy nhất.
Để làm điều này, bạn sẽ tìm kiếm đệ quy tất cả các thành viên có thể và thêm thông tin này vào một trường. Bạn cần dùng toán tử CAST() để gộp các ID thành một chuỗi.
Bạn sẽ tìm tất cả thành viên trong gia đình bắt đầu từ ID = 290. Tổng cộng có 300 bản ghi trong bảng family.
Bài tập này là một phần của khóa học
Truy vấn phân cấp và đệ quy trong SQL Server
Hướng dẫn bài tập
- Đặt
ParentIDcủa 290 làm điểm bắt đầu. - Nếu
Parent.ID = ''trong phépCASE, trườngParentcần được gán bằngParentIDhiện tại. - Nếu
Parent.ID <> ''trong phépCASE, cần nối thêm Parent ID vào giá trịParenthiện tại ở mỗi vòng lặp. - Chọn
NamevàParenttừ CTE đã định nghĩa.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
WITH tree AS (
SELECT
ID,
Name,
ParentID,
CAST('0' AS VARCHAR(MAX)) as Parent
FROM family
-- Initialize the ParentID to 290
WHERE ___ = ___
UNION ALL
SELECT
Next.ID,
Next.Name,
Parent.ID,
CAST(CASE WHEN Parent.ID = ''
-- Set the Parent field to the current ParentID
THEN(CAST(Next.___ AS VARCHAR(MAX)))
-- Add the ParentID to the current Parent in each iteration
ELSE(Parent.Parent + ' -> ' + CAST(Next.___ AS VARCHAR(MAX)))
END AS VARCHAR(MAX))
FROM family AS Next
INNER JOIN tree AS Parent
ON Next.ParentID = Parent.ID)
-- Select the Name, Parent from tree
SELECT ___, ___
FROM ___;