我有两个名为User
和ParentUser
的表,它们之间存在一对多的关系,而多边是ParentUser
表。
我想编写一个查询来传递parentId并获取其所有子项以及列名HasChildren
以查看每个孩子是否有孩子。
下图显示了一些示例数据和所需结果:
尝试:
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。
答案 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