如何编写查询以检查 child 是否在 table 中有任何 children
How to write a query to check if a child has any children in a table
我有两个名为 User
和 ParentUser
的 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
我有两个名为 User
和 ParentUser
的 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