是的,有可能使用遞歸CTE。這是一個示例。
declare @tbl table(child varchar(5), parent varchar(5))
insert @tbl values
('a', 'b'),
('b', 'c'),
('c', 'd'),
('e', 'f')
;with tbl as (
--anchor query
--find starting level
select parent child, parent parent, 0 lvl
from @tbl t
where parent not in (select child from @tbl)
union all
--recursive query
select t.child, tbl.parent, lvl+1 --keep top level parent
from @tbl t
inner join tbl on t.parent=tbl.child --go up the tree to previous level
)
--filter final results
select child,parent from tbl
where lvl>0 --lvl 0 is fake level
order by child
'這是哪種RDBMS?請添加一個標籤來指定您是使用'mysql','postgresql','sql-server','oracle'還是'db2' - 或者其他的東西。 –
如果您使用支持[現代SQL](http://modern-sql.com/slides)的DBMS,則可以使用遞歸公用表表達式。查看標有[tag:recursive-query]的解決方案 –
我正在使用sql server –