如何设置一个如果选择返回选择在SQL中?
我有两个表名为User
和ParentUser
,它们之间有一对多的关系,许多方面是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的用户是那些人不有什么。
如何处理?
更新
你需要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
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;
现在我读了你的意见。嗯,你的问题描述完全不同于你的评论。我的回答是正确的,如果你想得到结果,在一个问题中描述。但是,通过你的评论......很难理解你想要什么。据我所知,你需要在这里递归。 – Juozas
这两个查询都正常工作,但是当我使用第二个查询时,它返回父用户。我需要查询2中父级的孩子。 –
否。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*/
)
这不是我的工作的用户properly.One命名为A有一些孩子,但本身是一个名为B.Your查询是B. –
@HamidReza返回0,A,但1另一个用户的孩子 - 你能添加示例数据和预期结果 –
我更新了问题。 –