【发布时间】:2017-05-31 00:55:08
【问题描述】:
我有两个名为 User 和 ParentUser 的表,它们之间存在一对多关系,而多方是 ParentUser 表。
我想写一个查询来传递一个 parentId 并获取它的所有孩子和一个列名HasChildren 来查看每个孩子是否有孩子。
下图显示了一些示例数据和需要的结果:
尝试:
1-By 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。
【问题讨论】:
-
你能分享一下你到目前为止尝试过的查询吗?
-
你为什么不让我们知道以前有人问过这个问题?
-
@CraigYoung 你在评论中提到的问题也是我的问题,但由于它有一些误解,我决定再做一个。
-
@HamidReza 我知道另一个也是你的问题。这个问题只需要在您的第一个问题的解决方案的结果中添加一个简单的过滤器。我在证明这一点的问题中添加了answer。
标签: sql sql-server tsql sqlcommand