Tôi có cấu trúc như thế này:
Làm thế nào để có được tất cả con cái của cha mẹ và con cái của họ sau đó sử dụng đệ quy trong truy vấn
<Unit>
<SubUnit1>
<SubSubUnit1/>
<SubSubUnit2/>
...
<SubSubUnitN/>
</SubUnit1/>
<SubUnit2>
<SubSubUnit1/>
<SubSubUnit2/>
...
<SubSubUnitN/>
</SubUnit2/>
...
<SubUnitN>
<SubSubUnit1/>
<SubSubUnit2/>
...
<SubSubUnitN/>
</SubUnitN/>
</Unit>
Cấu trúc này có 3 mức độ: chính Unit, tiểu đơn vị và SubSubUnits.
Tôi muốn chọn tất cả trẻ em theo UnitId.
Nếu tôi tìm kiếm theo đơn vị, tôi phải lấy tất cả cây.
Nếu tôi tìm kiếm theo SubUnit1, tôi phải nhận SubUnit1 và tất cả các con của SubUnit1.
Nếu tôi tìm kiếm SubSubUnit2, tôi phải tự lấy.
Đây là cố gắng của tôi:
with a(id, parentid, name)
as (
select id, parentId, name
from customer a
where parentId is null
union all
select a.id, a.parentid, a.Name
from customer
inner join a on customer.parentId = customer.id
)
select parentid, id, name
from customer pod
where pod.parentid in (
select id
from customer grbs
where grbs.parentid in (
select id
from customer t
where t.parentid = @UnitId
))
union
select parentid, id, name
from customer grbs
where grbs.parentid in (
select id
from customer t
where t.parentid = @UnitId
)
union
select parentid, id, name
from customer c
where c.Id = @UnitId
order by parentid, id
tôi sử dụng 3 công đoàn-từ, nó không phải là tốt nhưng nó hoạt động. Cấu trúc trường hợp sẽ có N cấp độ, làm thế nào tôi có được kết quả chính xác?
Hãy xem câu trả lời này: http://stackoverflow.com/questions/317322/optimized-sql-for-tree-structures – twoleggedhorse