如何在没有子级的分层表中查找记录?

时间:2014-04-02 14:56:33

标签: sql-server

嗨,我有这张桌子:

CREATE TABLE [dbo].[personel2](
[prsl_id] [int] IDENTITY(1,1) NOT NULL ,
[prsl_name] [nvarchar](50) NOT NULL,
[prsl_family] [nvarchar](50) NOT NULL,
[parent_id] [int] NULL)

prsl_id是主键,parent_id是与prsl_id有关系的外键。 我有一个大问题,如何在此表中找到没有孩子的记录? 例如:

 prsl_id|parent_id|name               
 1      |null     |a
 2      |1        |b        
 3      |null     |c
 4      |2        |d

预期结果是:

prsl_id|parent_id|name               
 3      |null     |c
 4      |2        |d

请尽快帮助我。谢谢..

1 个答案:

答案 0 :(得分:0)

你可以试试这个

SELECT x.prsl_id from 

(SELECT e.prsl_id,  COUNT(s.prsl_id) as "Num_subordinates"
FROM   dbo.personel2 e
       LEFT JOIN dbo.personel2 s ON s.prsl_id = e.parent_id
GROUP  BY e.prsl_id) x where Num_subordinates = 0

您可以针对您的问题尝试此操作

select prsl_id from personel2 x where not exists (select parent_id from personel2 y where x.prsl_id=y.parent_id)