1

私は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、親が顧客であり、その子の子であるすべての行を返す必要がある場合など..

4

2 に答える 2

2

これは行う必要があります:

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);

そして、これがあなたが試すための実用的なsqlfiddleです。

于 2012-09-27T17:58:28.983 に答える
0

テーブルをそれ自体に結合できます。このクエリは、すべての親と、それらが関連付けられている可能性のあるすべての子を返します。

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 = ''
于 2012-09-27T16:23:25.107 に答える