2017-01-16 108 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

聲音正確!謝謝;) –

相關問題