2017-01-16 2 views
1

UserParentUser이라는 테이블이 두 개 있는데 그 중 하나와 많은 관계가 있으며 많은 쪽이 ParentUser 테이블입니다.자식 테이블에 자식이 있는지 확인하기 위해 쿼리를 작성하는 방법

parentId를 전달하고 모든 자식을 가져오고 열 이름 HasChildren을 가져 오는 쿼리를 작성하여 모든 자식이 자식이 있는지 여부를 확인하고 싶습니다.

enter image description here

시도합니다 :

여기 좋은 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 

모든 1-으로하지만 난 parentId을 통과하지 못할

아래 그림은 일부 샘플 데이터와 필요한 결과를 보여줍니다 그것에. 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의 값으로

2- 유 plz 수 있습니다 1.

+1

는 지금까지 시도 HV 어떤 쿼리를 공유 항상? –

+1

왜 이전에이 사실을 물어 보지 않았습니까? –

+1

[선택할 수있는 옵션을 설정하는 방법은 sql에서 select를 반환하는 방법?] (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

소리가 맞습니다! 감사합니다 .;) –