从表中按关系选择行

时间:2019-04-11 06:32:18

标签: sql

如何将行从同一张表中选择出来。即我有一个具有ID,ParentIDFK和Name的表。名称为blabla,具有parentidfk 0和ID 4,但是下一个名称为ehehe并具有parentidfk 4和其他ID。如何选择它们以仅查看孩子和父母的关系。

3 个答案:

答案 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

enter image description here

答案 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