如何编写查询以检查 child 是否在 table 中有任何 children

How to write a query to check if a child has any children in a table

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

我想编写一个查询来传递一个 parentId 并获取它的所有 children 和一个列名 HasChildren 以查看每个 child 是否有任何 child仁与否。

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

尝试次数:

1-来自 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。

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