gpt4 book ai didi

SQL Server : How to get all child records given a parent id in a self referencing table

转载 作者:行者123 更新时间:2023-12-02 04:32:32 33 4
gpt4 key购买 nike

您好,我有一个引用自身的表,我需要能够从给定的父 ID 中选择父记录及其所有子记录。

我的表格如下:

ID   | ParentID | Name         
-----------------------
1 NULL A
2 1 B-1
3 1 B-2
4 2 C-1
5 2 C-2

因此,对于上面的示例,我希望能够传入值 1 并获取上面的所有记录。

到目前为止,我已经提出了以下递归表值函数,但它的行为不符合预期(仅返回第一条记录)。

CREATE FUNCTION [dbo].[SelectBranches]
(
@id INT
,@parentId INT
)
RETURNS @branchTable TABLE
(
ID INT
,ParentID INT
,Name INT
)
AS
BEGIN

IF @branchId IS NOT NULL BEGIN

INSERT INTO @branchTable
SELECT
ID
,ParentID
,Name
FROM
tblLinkAdvertiserCity
WHERE
ID = @id

END

INSERT INTO @branchTable
SELECT
br.ID
,br.ParentID
,br.Name
FROM
@branchTable b
CROSS APPLY
dbo.SelectBranches(NULL, b.ParentID) br

RETURN
END
GO

最佳答案

你可以试试这个

DECLARE @Table TABLE(
ID INT,
ParentID INT,
NAME VARCHAR(20)
)

INSERT INTO @Table (ID,ParentID,[NAME]) SELECT 1, NULL, 'A'
INSERT INTO @Table (ID,ParentID,[NAME]) SELECT 2, 1, 'B-1'
INSERT INTO @Table (ID,ParentID,[NAME]) SELECT 3, 1, 'B-2'
INSERT INTO @Table (ID,ParentID,[NAME]) SELECT 4, 2, 'C-1'
INSERT INTO @Table (ID,ParentID,[NAME]) SELECT 5, 2, 'C-2'


DECLARE @ID INT

SELECT @ID = 2

;WITH ret AS(
SELECT *
FROM @Table
WHERE ID = @ID
UNION ALL
SELECT t.*
FROM @Table t INNER JOIN
ret r ON t.ParentID = r.ID
)

SELECT *
FROM ret

关于SQL Server : How to get all child records given a parent id in a self referencing table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1686340/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com