Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर 2005 में माता-पिता को बच्चे को कैसे प्राप्त करें?

मुझे लगता है कि आपको अपने बच्चे_आईडी का नाम बदलकर नोड करना चाहिए, अपने माता-पिता का नाम बदलकर चाइल्ड_ऑफ करना चाहिए। आपके कॉलम का नामकरण थोड़ा भ्रमित करने वाला है

create table stack_overflow
(
node int, child_of int
);


insert into stack_overflow(node, child_of) values
(1,0),
(2,1),
(3,2),
(4,2),
(5,3),
(6,4),
(7,0),
(8,7),
(9,8),
(10,1);

यह किसी भी सीटीई-सक्षम आरडीबीएमएस पर काम करता है :

with find_parent(parent, child_of, recentness) as
(
    select node, child_of, 0 
    from stack_overflow
    where node = 9
    union all
    select i.node, i.child_of, fp.recentness + 1
    from stack_overflow i
    join find_parent fp on i.node = fp.child_of
)
select top 1 parent from find_parent 
order by recentness desc

आउटपुट:

parent
7

[संपादित करें:अधिक लचीला और भविष्य-सबूत] :

with find_parent(node_group, parent, child_of, recentness) as
(
    select node, node, child_of, 0
    from stack_overflow
    where node in (5,9)
    union all
    select fp.node_group, i.node, i.child_of, fp.recentness + 1
    from stack_overflow i
    join find_parent fp on i.node = fp.child_of
)
select q.node_group as to_find, parent as found 
from find_parent q 
join
(
    select node_group, max(recentness) as answer
    from find_parent
    group by node_group 
) as ans on q.node_group = ans.node_group and q.recentness = ans.answer 
order by to_find    

आउटपुट:

to_find     found
5           1
9           7

यदि आप पोस्टग्रेज . का उपयोग कर रहे हैं , उपरोक्त कोड को छोटा किया जा सकता है:

with recursive find_parent(node_group, parent, child_of, recentness) as
(
    select node, node, child_of, 0
    from stack_overflow
    where node in (5,9)
    union all
    select fp.node_group, i.node, i.child_of, fp.recentness + 1
    from stack_overflow i
    join find_parent fp on i.node = fp.child_of
)
select distinct on (node_group) node_group as to_find, parent as found 
from find_parent 
order by to_find, recentness desc

चट्टानों पर अलग! :-)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर में लाखों पंक्तियों के साथ बड़ी तालिका को कैसे अपडेट करें?

  2. SQL सर्वर 2005 डेटाबेस को पुनर्स्थापित करने के बाद सभी उपयोगकर्ताओं को लॉगिन करने के लिए लिंक करना

  3. एसक्यूएल में कॉलम और पंक्तियों को स्थानांतरित करने का आसान तरीका?

  4. अपने आप में एक तालिका में शामिल हों

  5. एसक्लड निर्भरता विश्वसनीयता?