如何设置一个如果选择返回选择在SQL中?

如何设置一个如果选择返回选择在SQL中?

问题描述:

我有两个表名为UserParentUser,它们之间有一对多的关系,许多方面是ParentUser表。如何设置一个如果选择返回选择在SQL中?

我写了这个选择上User表:

select u.* from [User] u inner join ParentUser p on u.UserId=p.UserId where p.ParentId=2440 

现在我想另一列添加到u *包含0或1.0是谁有一些孩子在ParentUser和1的用户是那些人不有什么。

如何处理?

更新

enter image description here

你需要LEFT JOIN

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 
        WHERE ParentId IN (SELECT UserId 
             FROM ParentUser 
             WHERE parentId = 2440)) p 
       ON u.UserId = p.ParentId 
+0

这不是我的工作的用户properly.One命名为A有一些孩子,但本身是一个名为B.Your查询是B. –

+0

@HamidReza返回0,A,但1另一个用户的孩子 - 你能添加示例数据和预期结果 –

+0

我更新了问题。 –

SELECT DISTINCT 
    [UserId]  = [u].[userid] 
    ,[HasChildren] = CAST(ISNULL([pu].[userid], 0) AS BIT) 
FROM 
    [User] AS [u] 
OUTER APPLY 
    (
     SELECT [userid] FROM [ParentUser] WHERE [parentid] = [u].[userid] 
    )  AS [pu]; 

而且,如果你想通过父ID进行过滤:

DECLARE @ParentId INT = 2; 

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

现在我读了你的意见。嗯,你的问题描述完全不同于你的评论。我的回答是正确的,如果你想得到结果,在一个问题中描述。但是,通过你的评论......很难理解你想要什么。据我所知,你需要在这里递归。 – Juozas

+0

这两个查询都正常工作,但是当我使用第二个查询时,它返回父用户。我需要查询2中父级的孩子。 –

+0

否。HasChildren的值为父级,始终设置为1。我在这里写另一个问题:http://stackoverflow.com/questions/41672098/how-to-write-a-query-to-check-if-a-child-has-any-children-in-a-table –

确定每个有子女的用户都相当容易。以下是通过确定孩子的数量开始的,但在最终输出中(与用户的其他栏目)简单地将其缩小为:“是否有孩子?”

/************************* Set up sample data *************************/ 
declare @User table (
    UserId int, 
    UserName varchar(10) 
) 
insert @User 
select 1, 'A' union all 
select 2, 'B' union all 
select 3, 'C' 

declare @ParentUser table (
    UserId int, 
    ParentId int 
) 
insert @ParentUser 
select 3, 1 union all 
select 3, 2 union all 
select 2, 1 


/****************************** Solution ******************************/ 
;with ChildCounts as (
    select p.ParentId, COUNT(*) as ChildCount 
    from @ParentUser p 
    group by p.ParentId 
), UsersWithHasChildren as (
    select u.*, 
      case 
       when p.ChildCount > 0 then 1 
       else 0 
      end as HasChildren 
    from @User u 
      left join ChildCounts p on 
       p.ParentId = u.UserId 
) 
select * 
from UsersWithHasChildren u 

从你重复的问题,确定哪些特定的父母子女也有儿童的特殊情况下,如以下微不足道WHERE过滤器。

where u.UserId in (
      select p.UserId 
      from @ParentUser p 
      where p.ParentId = 1 /*Parametrise this value*/ 
     )