如何编写查询以检查子项是否在表中有子项

时间:2017-01-16 08:24:03

标签: sql sql-server tsql sqlcommand

我有两个名为UserParentUser的表,它们之间存在一对多的关系,而多边是ParentUser表。

我想编写一个查询来传递parentId并获取其所有子项以及列名HasChildren以查看每个孩子是否有孩子。

下图显示了一些示例数据和所需结果:

enter image description here

尝试:

1-By Prdp

SELECT u.*,
       CASE
         WHEN p.ParentId IS NULL THEN 1
         ELSE 0
       END as HasChildren
FROM   [User] u
       LEFT JOIN (select distinct ParentId from ParentUser) p
              ON u.UserId = p.ParentId

这里一切都很好但我不能通过parentId。

2- Juozas

DECLARE @ParentId INT = 2441;

SELECT DISTINCT
     [UserId]       =   [u].[userid]
    ,[HasChildren]  =   CAST(ISNULL([pu].[userid], 0) AS BIT)
    ,[ChildrenId]   =   [pu].[userid]
FROM
    [user]  AS  [u]
OUTER APPLY
    (
        SELECT [userid], [parentid] FROM [ParentUser] WHERE [parentid] = [u].[userid]
    )       AS  [pu]
WHERE
        [pu].[parentid] = @ParentId;

一切都很好,但是HasChildren的值总是为1。

1 个答案:

答案 0 :(得分:2)

SELECT UserId, HasChildren = CASE WHEN EXISTS(SELECT 1 FROM ParentUser pu2
                                              WHERE pu2.ParentId = pu.UserId)
                             THEN 1 ELSE 0 END
FROM ParentUser pu
WHERE ParentId = @ParentId
ORDER BY UserId