【问题标题】:How to find all child of a table column in sql server table?如何在sql server表中查找表列的所有子项?
【发布时间】:2012-09-27 16:17:53
【问题描述】:

我有一个sql数据库表

CREATE TABLE [dbo].[LedgerGroups](
    [GroupName] [varchar](50) NOT NULL primary key,
    [GroupParent] [varchar](50) NULL
)

表中的记录是

-----GroupName------ ---GroupParent---

Bangalore Customers    Karnataka Customers
Chennai Customers      Tamilnadu Customers
Customers              NULL
Ernakulam Customers    Kerala Customers
Hubli Customers        Karnataka Customers
Karnataka Customers    Customers
Kerala Customers       Customers
Kollam Customers       Kerala Customers
Nagercoil Customers    Tamilnadu Customers
Suppliers              NULL
Tamilnadu Customers    Customers
Tirunelveli Customers  Tamilnadu Customers

我如何查询表,以便我可以获得特定值的所有子项。例如,如果我给 Customers 它应该返回其父为客户的所有行及其子的子等..

【问题讨论】:

  • 你能举例说明你的预期输出吗?
  • 我的预期输出在我接受的答案的 sqlfiddle 中。请用客户替换。是否可以在 ef 中完成相同的操作

标签: .net sql sql-server-2008


【解决方案1】:

应该这样做:

DECLARE @Group VARCHAR(50)
SET @Group = 'Karnataka Customers'

;WITH CTE AS
(
  SELECT *
  FROM [dbo].[LedgerGroups]
  WHERE GroupParent = @Group
  UNION ALL
  SELECT B.*
  FROM CTE A
  INNER JOIN [dbo].[LedgerGroups] B
  ON A.GroupName = B.GroupPArent
)
SELECT *
FROM CTE
OPTION(MAXRECURSION 0);

还有here is a working sqlfiddle 供你尝试。

【讨论】:

    【解决方案2】:

    您可以将表连接到自身。此查询将返回所有父母和他们可能关联的任何孩子:

    SELECT Parent.GroupName, Parent.GroupParent
    ,Children.GroupName, Children.GroupParent
    from LedgerGroup as Parent
    LEFT JOIN LedgerGroup as Children on Parent.GroupName = Children.GroupParent
    --  WHERE Parent.GroupName = ''
    

    【讨论】:

    • 不,我想递归做,直到 GroupName 没有孩子
    猜你喜欢
    • 2014-03-27
    • 2011-02-13
    • 1970-01-01
    • 2017-08-10
    • 2015-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多