如何在查询中执行查询,并将其设置为主查询的条件
本文关键字:查询 设置 条件 执行 | 更新日期: 2023-09-27 18:12:05
组织表:
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的子组织是Org3和Org4。组织5是组织3 的子组织
我想在数据网格中显示父组织1下这些组织的所有详细信息。这里我只知道Org1 ID所以mysql查询就像
Select OrgName from Org_table where ID= 20 and ParentID is 20;
但是这个查询只返回Org1和Org2,我必须返回Org3、Org4和Org5,因为它在Org1下。我该怎么做?我应该使用某种循环吗?如果是的话,该怎么做。我在我的asp.net网站上使用c。
在运行时,我不知道哪个组织是哪个org的子组织。所以我必须找到父组织id是否在主组织下
我想做递归查询
我手头没有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是否完全正确。。可能需要花一点粗花呢。
您可以对结果进行迭代,并不断询问下一个相关记录。
首先运行
Select OrgName, Id from Org_table where ID= 20 and ParentID = 20
然后对于每个具有Id的结果!=对于20,您应该再次运行查询。(Org2示例(
Select OrgName, Id from Org_table where ParentID = 21
您可以将结果保存在列表中,然后获得不同的结果。
由于MySQL不支持递归查询/CTE,您将不得不模仿它(比如说,这并不简单(。
这里有一个关于这个主题的优秀教程:
http://explainextended.com/2009/03/17/hierarchical-queries-in-mysql/
我不会在这里复制代码:(