sql - one to many join on 3 levels all on the same table -


i have table pages, these pages have parents pages in same table.

for examples sake table looks like:

table: pages pageid :key pageparent :foreign key pagename 

now question sql when creating menustructure like:

pageid     pageparent     pagename 1          null           home  2          1              page_under_home1   5          2              page_under_pageid2_1   6          2              page_under_pageid2_2  4          1              page_under_home2   5          4              page_under_pageid4_1    7          5              page_under_pageid5_1   6          4              page_under_pageid4_2    9          6              page_under_pageid6_1    10         6              page_under_pageid6_2  8          1              page_under_home3  11         1              page_under_home4   12         11             page_under_pageid11_1    13         12             page_under_pageid12_1 

i have this:

select     p1.pageid, p1.pagename, p1.pageparent, p2.pagename expr1         dbo.pages p1 full outer join                           (select     pageid, pagename                                      dbo.pages                                  (pageparent null)) p2 on p2.pageid = p1.pageparent 

but doesnt create output want , think i'm going @ wrong way...

edit:

this have:

with      pagesmenu(pageid, pageparent, pagename)   (     select              pageid, pageparent, pagename                      dbo.pages                  (pageparent null)          ,          (pageisvisible = 'true')     union      select              b.pageid, b.pageparent, b.pagename                      pagesmenu      inner join         dbo.pages b      on          a.pageid = b.pageparent )  select     pageid, pageparent, pagename         pagesmenu 

and seems work not recurs, first recursion seems work looks doesn't second time.

result:

pageid    pageparent    pagename 3         null          home 1         3             test 4         3             test 5         4             test 6         4             test 7         4             test 8         5             test  <---wrong 2         1             test  <---wrong 

here ms link on cte's: http://msdn.microsoft.com/en-us/library/ms186243.aspx


Comments

Popular posts from this blog

c++ - How do I get a multi line tooltip in MFC -

asp.net - In javascript how to find the height and width -

c# - DataTable to EnumerableRowCollection -