2017-01-16 96 views
1

我有两个表名为UserParentUser,他们之间有一对多的关系,许多方面是ParentUser表。如何写一个查询来检查一个孩子是否有一个表中的任何孩子

我想写一个查询来传递一个parentId并获取它的所有孩子和一个列名HasChildren来查看每个孩子是否有孩子。

下图显示了一些样本数据,需要的结果:

enter image description here

尝试次数:

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

+1

u能PLZ分享您到目前为止HV试了一下查询? –

+1

你为什么不让我们知道这已经被问过? –

+1

可能重复[如何设置如果选择返回在SQL选择?](http://stackoverflow.com/questions/41669968/how-to-set-an-if-on-a-select-for -returning-select-in-sql) –

回答

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 
+0

声音正确!谢谢;) –

相关问题