一个简单UNION可以做工作。或者有些不同,你可以使用recursive CTE。正常情况下,当存在多个级别时,使用递归CTE,但没有理由不能使用相同的技术仅用于1级。
declare @t1 table (id int, category varchar(100))
insert @t1 values (1, 'furniture'), (2, 'Electronic'), (3, 'Books')
declare @t2 table (id int, item varchar(100))
insert @t2 values (1, 'sofa'), (1, 'chair'), (3, 'c#'), (3, 'sql'), (2, 'fan'), (2, 'tv')
-- Approach 1 : UNION
; with cte as (
select
id, 0 as level, category as name
from
@t1
union all
select
id, 1 as level, item as name
from
@t2
)
select
name
from
cte
order by
id, level
-- Approach 2 : Recursive CTE
; with cte as (
select
id, category as name, 0 as level
from @t1
union all
select
t2.id, t2.item, level + 1
from
@t2 t2
inner join cte on cte.id = t2.id
and level = 0
)
select
name
from
cte
order by
id, level