sql server - Sql query for 3 level tree? -
i have table , want 3 lvl tree. example
node id parentid name 1 -1 test 1 2 -1 test 2 3 1 test 1.1 4 1 test 1.2 5 3 test 1.1.1 6 3 test 1.1.2 7 5 test 1.1.1.1 if filtered parentid = -1 want rows parentid = -1 , children's +2 lvl.
if filtered id = 2 want row id = 2 , children's +2 lvl.
update
i use ms sql server 2008, entity framework 6.1.3. understand, can use 3 selects. looking effective method
you can use recursive sql in sql server.
with reccte (childid, parentid, name, depth) assuming ( select yourtable.id childid, yourtable.parentid, cast('test ' + yourtable.id varchar(20)) name 0 depth yourtable parentid = -1 union select yourtable.id childid, yourtable.parentid parentid, reccte.path + '.' + yourtable.id name reccte.depth + 1 depth reccte inner join yourtable on reccte.childid = yourtable.parentid reccte.depth + 1 <= 2 ) select * reccte; the bit inside cte on top of union seed query recursive sql. it's place recursive lookup start. wanted start @ parentid = -1, it's here in where statement.
the bit inside cte below union recursive term. joins recursive cte , brings in more data table. joining id table childid recursive resultset.
the recursive term test see how deep we've gotten. if depth cte + 1 less or equal 2 stop adding children loop up, ending loop particular leg of hierarchy.
the last little bit below cte part runs cte results back.
these recursive queries confusing hell @ first, spend time them , you'll find lot of use them. you'll find aren't difficult write once have parts sussed out.
Comments
Post a Comment