Giả sử các gia đình dưới đây:Nhận các thành viên gia đình
Schema xây dựng của việc này là:
create table PersonConn (child int, parent int)
insert into PersonConn values (1,2)
insert into PersonConn values (1,3)
insert into PersonConn values (5,3)
insert into PersonConn values (5,4)
insert into PersonConn values (6,7)
insert into PersonConn values (6,8)
insert into PersonConn values (2,9)
insert into PersonConn values (2,10)
insert into PersonConn values (3,11)
insert into PersonConn values (3,12)
Để có được tổ tiên của một thành viên trong gia đình tôi có thể sử dụng đệ quy như cho thấy dưới đây:
WITH Childs AS (
SELECT distinct Child, Parent
FROM PersonConn
WHERE Child = 1
UNION ALL
SELECT t2.Child, t2.Parent
FROM [Childs] t1
INNER JOIN PersonConn t2
ON t2.Child = t1.parent
)
SELECT PARENT FROM CHILDS
Nó sẽ lấy tất cả tổ tiên của thành viên được chọn (ID 1 trong ví dụ này), nhưng không phải là anh em chẳng hạn. Truy vấn chỉ tăng lên trong cây gia đình.
My câu hỏi là:
Làm thế nào để có được tất cả các thành viên của một gia đình (con trai, cha mẹ, ông nội, chú bác, anh em họ, vv ...) bắt đầu từ một người duy nhất?
CẬP NHẬT
Một phương pháp để giải quyết này là một vòng lặp mà chèn một người trong một bảng tạm thời. Sau khi bạn có thể tham gia PersonConn
bảng với bảng tạm thời này và chèn người khác. Làm điều này cho đến khi không có ai được chèn vào nữa. Tôi đang tìm kiếm một cách hiệu quả hơn (và thanh lịch). Tôi có khoảng 200MM bản ghi trong bảng PersonConn
.
Bạn sẽ cần chèn gốc vào PersonConn ... Thay vì chọn nơi CHILD = 1, bạn sẽ làm nơi PARENT IS NULL. Điều đó sẽ cung cấp cho bạn tất cả các thành viên, bắt đầu từ gốc xuống dưới. – Mez
Thực ra tôi muốn chọn một ID người (con hoặc cha mẹ) và nhận tất cả các thành viên gia đình kết nối với người đó. Tôi không có một người gốc duy nhất với các thành viên dưới đây. Tôi có một nhóm người kết nối với tư cách là cha mẹ và con cái. Quan sát ví dụ đã cho tôi có 6 người không có cha mẹ thông báo. – Nizam
Bạn có thể chỉ định cấu trúc cây của gia đình - và bạn có 2 lá có 1 cha mẹ. Tuy nhiên làm thế nào các lá liên quan đến nhau - bạn sẽ phải xác định mối quan hệ trong một cột khác. Bạn có thể cho rằng họ là anh chị em bởi vì họ ở cùng cấp độ - bạn có thể tính toán chiều sâu trong CTE, tuy nhiên tôi sẽ đề nghị trong trường hợp của bạn để xác định mối quan hệ. – Mez