如何将行从同一张表中选择出来。即我有一个具有ID,ParentIDFK和Name的表。名称为blabla,具有parentidfk 0和ID 4,但是下一个名称为ehehe并具有parentidfk 4和其他ID。如何选择它们以仅查看孩子和父母的关系。
答案 0 :(得分:0)
如果您希望所有子行且仅需要相关的父级,则可以使用左联接在父子表之间建立关系
示例:
Select * from Parent p left Join Child c on p.parentId = c.ParentIDFK
在这里您可以将*替换为您想要选择的列。
答案 1 :(得分:0)
使用CTE
with CTE_tbl AS(
select #tbl.* from #tbl where parentID= 0
union all
select #tbl.*
from #tbl
inner join CTE_tbl on #tbl.parentID = CTE_tbl.id
)select * from CTE_tbl
答案 2 :(得分:0)
我试图在这里模拟您的情况:
create table employee (id int, name varchar(10), parent_id int);
insert into employee values (1, 'aaa', NULL), (2, 'bbb',1), (3, 'ccc',1), (4,'ddd',2), (5,'eee',2),(6,'fff',3),(7,'ggg',5),(8,'hhh',NULL);
--if there is no parent, empty string '' is displayed
select b.id as 'Child', b.name 'Child Name', CASE WHEN a.name = b.name THEN '' ELSE a.name END as 'Parent'
from
employee a
left join
employee b
ON
a.id = ISNULL(b.parent_id, b.id)
WHERE b.id IS NOT NULL