相关疑难解决方法(0)

是否可以编写一个SQLite查询,该查询以递归方式获取作为根节点的子项的所有项

我有2张桌子. itemsitemItems

itemItems描述了多对多之间的关系items.即一个成员items可以有很多孩子,他们可以有很多孩子,反过来可以有很多孩子等.

项目:

itemID |  more stuff ......
1         ...    
2         ...
3         ...
4         ...
Run Code Online (Sandbox Code Playgroud)

itemItems:

parentItemID |  childItemID  
1               2 
1               3
2               4
Run Code Online (Sandbox Code Playgroud)

我想编写一个查询,以递归方式获取一个根节点下的所有子节点.

我相信这可以用一种称为递归连接的东西,但我发现这个概念非常令人困惑....(类似于这个问题,但是sqlite不是sql server而且很多都不是一对多)

通过执行以下操作,我可以获得第一级(即一个项目下的所有子项)

SELECT * 
FROM items 
INNER JOIN itemItems
ON items.itemID = itemItems.childItemID
WHERE itemItems.parentItemID = 1
Run Code Online (Sandbox Code Playgroud)

我怎么能延长这个以递归方式获得所有孩子的孩子等...?

sql sqlite

7
推荐指数
1
解决办法
4446
查看次数

EntityFramework中的公用表表达式

我在Sql Server中有这个查询,我需要在EntityFramework中使用,那么如何编写一个与此结果相同的EntityFramwork代码

WITH    cte AS
        (
        SELECT  *
        FROM    StockGroups
        WHERE   GroupParent ='Stationery' 
        UNION ALL
        SELECT  g.*
        FROM    StockGroups g
        JOIN    cte
        ON      g.GroupParent = cte.GroupName
        )
SELECT  *
FROM    cte
Run Code Online (Sandbox Code Playgroud)

我不知道如何在EF中转换它,所以我尝试使用join.

from a in db.StockGroups
join b in db.StockGroups on new { GroupParent = a.GroupParent } equals new { GroupParent = b.GroupName }
where
  b.GroupName == "Stationery"
select new {
  a.GroupName,
  a.GroupParent,
  Column1 = b.GroupName,
  Column2 = b.GroupParent
}
Run Code Online (Sandbox Code Playgroud)

但结果并不像CTE一样递归.

.net c# linq common-table-expression entity-framework-4

7
推荐指数
3
解决办法
8383
查看次数

创建关联 ID

我有下表:

Account_Number  Parent_Account  Child_Account
R003247         R000355         R000002
R000355         NULL            R003247
R000002         R003247         NULL
R004853         NULL            R028636
R004853         NULL            R028638
R004853         NULL            R028637
R028636         R004853         NULL
R028638         R004853         NULL
R028637         R004853         NULL
Run Code Online (Sandbox Code Playgroud)

可以加载:

create table dbo.temptable
(Account_Number varchar(10),
Parent_Account varchar(10),
Child_Account varchar(10))

insert into dbo.temptable
values
('R003247','R000355','R000002'),
('R000355',NULL,'R003247'),
('R000002','R003247',NULL),
('R004853',NULL,'R028636'),
('R004853',NULL,'R028638'),
('R004853',NULL,'R028637'),
('R028636','R004853',NULL),
('R028638','R004853',NULL),
('R028637','R004853',NULL)
Run Code Online (Sandbox Code Playgroud)

此表表示帐号的拆分和重新分配。它与跟踪地块的分割和组合有关。

前三行,如上表所示,应该组合在一起,因为它来自R000355--> R003247-->R000002

如上表所示,最后 6 个也应分组,因为它显示R004853分为三个R028636, R028637, R028638

我已经尝试了很多这样的变化:

SELECT CE.*,TT.ID
FROM dbo.temptable CE 
INNER JOIN …
Run Code Online (Sandbox Code Playgroud)

sql-server

5
推荐指数
1
解决办法
90
查看次数

在自引用表SQL Server上找到最高的祖父母

我在SQL Server中有此表:

Parent Child 1 2 89 7 2 3 10 5 3 4

我需要构建一个递归存储过程,以找到任何孩子的最大升序。

例如:如果我想找到最大上升数4,它应该返回1,因为:

4是3的孩子。

3是2的孩子。

2是1的子代。

所以我可以找到最终的父母。

sql sql-server stored-procedures

1
推荐指数
1
解决办法
435
查看次数