0

こんにちは、これを行うにはクエリが必要です私のテーブルデータ

ID        ParentID         DATA
--------------------------------
1             -1             a
2              1             b
3              2             c
4              3             d
5              3             f

recursively childsそして、パラメータとして ID を取り、すべてを返すクエリが必要です。Itself

parameter : (ID=2)

戻り値:

ID        ParentID         DATA
--------------------------------
2              1             b
3              2             c
4              3             d
5              3             f
4

4 に答える 4

3

これを試して:

;with temp as (
  select id, parentId, data from t
  where id = 2
  union all
  select t.id, t.parentId, t.data from t
  join temp on temp.id = t.parentId
)
select * from temp

ここでフィドル。

于 2012-04-11T16:31:17.290 に答える
2

これでうまくいくはずです:

create table #temp 
(
    id int, 
    parentid int,
    data varchar(1)
)
insert #temp (id, parentid, data) values (1, -1, 'a')
insert #temp (id, parentid, data) values (2,1, 'b')
insert #temp (id, parentid, data) values  (3,2, 'c')
insert #temp (id, parentid, data) values  (4,3, 'd')
insert #temp (id, parentid, data) values  (5,3, 'f')

; with cte as (
    select  id, parentid, data, id as topparent
    from    #temp
    union all
    select  child.id, child.parentid, child.data, parent.topparent
    from    #temp child
    join    cte parent
    on      parent.id = child.parentid

)
select  id, parentid, data
from    cte
where topparent = 2

drop table #temp

WHEREEDITまたは最初の句の中に句を入れることができますselect

create table #temp 
(
    id int, 
    parentid int,
    data varchar(1)
)
insert #temp (id, parentid, data) values (1, -1, 'a')
insert #temp (id, parentid, data) values (2,1, 'b')
insert #temp (id, parentid, data) values  (3,2, 'c')
insert #temp (id, parentid, data) values  (4,3, 'd')
insert #temp (id, parentid, data) values  (5,3, 'f')

; with cte as (
    select  id, parentid, data, id as topparent
    from    #temp
    WHERE id = 2
    union all
    select  child.id, child.parentid, child.data, parent.topparent
    from    #temp child
    join    cte parent
    on      parent.id = child.parentid

)
select  id, parentid, data
from    cte

drop table #temp

結果:

id  parentid      data
2   1              b
3   2              c
4   3              d
5   3              f
于 2012-04-11T16:28:27.933 に答える
1
declare @ID int = 2;

with C as
(
  select ID, ParentID, DATA
  from YourTable
  where ID = @ID
  union all
  select T.ID, T.ParentID, T.DATA
  from YourTable as T
    inner join C 
      on T.ParentID = C.ID
)
select ID, ParentID, DATA
from C

SE-Dataを試す

于 2012-04-11T16:30:01.477 に答える
0

これを試して。

select * from table where id= 2 or parentid = 2
于 2012-04-11T16:13:01.640 に答える