Org_table:
OrgName Id ParentID
Org1 20 Null
Org2 21 20
Org3 22 21
Org4 23 21
Org5 24 22
Org6 25 Null
在上表中,Org1是超级组织,Org2是Org1的子组织。 Org2的Sub Org是Org3和Org4。和Org 5是Org3的子组织
我想在数据网格中的父Org1下显示这些Org的所有详细信息。在这里,我只知道Org1 ID 所以mysql查询就像
Select OrgName from Org_table where ID= 20 and ParentID is 20;
但是这个查询只返回Org1和Org2,我还要返回Org3,Org4和Org5,因为它在Org1下。我该怎么做。我应该使用某种循环,如果是这样的话。我正在使用c#这是在我的asp.net网站上。
在运行期间,我不知道哪个组织是哪个组织的ORg。所以我必须找到如果父ID在主Org下
我想做递归查询
答案 0 :(得分:0)
您可以迭代结果并继续询问下一个相关记录。
首先运行
Select OrgName, Id from Org_table where ID= 20 and ParentID = 20
然后对于每个具有Id!= 20的结果,您应该再次运行查询。 (Org2的例子)
Select OrgName, Id from Org_table where ParentID = 21
您可以将结果保存在列表中,然后获取区别。
答案 1 :(得分:0)
由于MySQL不支持递归查询/ CTE,因此您必须模拟它(这不是简单的说法)。
这是关于这个主题的优秀教程:
http://explainextended.com/2009/03/17/hierarchical-queries-in-mysql/
我将不会在这里复制代码:)
答案 2 :(得分:0)
我手头没有mysql,但这应该做你需要的
CREATE TEMPORARY TABLE TempTable (OrgName VARCHAR(10), Id INT, ParentID INT);
INSERT INTO TempTable SELECT OrgName, Id, ParentID FROM org_table;
WHILE EXISTS (SELECT TOP 1 1 FROM TempTable WHERE EXISTS(SELECT TOP 1 1 FROM TempTable TempTableParent WHERE TempTableParent.ID = TempTable.ParentID AND TempTableParent.ParentID IS NOT NULL) ) DO
UPDATE TempTable SET ParentID = TempTableParent .parentID
FROM TempTable
INNER JOIN TempTable TempTableParent ON TempTableParent.id = TempTable.ParentID
WHERE TempTable.ParentID IS NOT NULL AND TempTableParent.ParentID IS NOT NULL
END WHILE;
SELECT * FROM TempTable
不确定update语句的语法是否完全正确的mysql ..可能需要稍微调整一下。