【问题标题】:How can I do a query inside a query and set that as a condition for the main query如何在查询中进行查询并将其设置为主查询的条件
【发布时间】:2011-12-11 18:54:15
【问题描述】:

组织表:

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 的子 Org

我想在我的数据网格中的父 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 的子组织。所以我必须找到 If parent id is under the main Org

我想做递归查询

【问题讨论】:

  • 你能指定你想怎么显示吗???因为在网格中,您只需要将父 ID 替换为组织名称即可。
  • 我想显示所有组织名称,我不想显示 ID。对于 Parent Org1,我想显示它的所有孩子

标签: c# mysql sql inner-join


【解决方案1】:

我手头没有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

不确定更新语句上的语法对于 mysql 是否完全正确。可能需要稍微调整一下。

【讨论】:

    【解决方案2】:

    您可以迭代结果并继续询问下一条相关记录。

    首先你运行

    Select OrgName, Id from Org_table where ID= 20 and ParentID = 20
    

    然后对于每个 Id != 为 20 的结果,您应该再次运行查询。 (以 Org2 为例)

    Select OrgName, Id from Org_table where ParentID = 21    
    

    您可以将结果保存在列表中,然后获取不同的值。

    【讨论】:

    • 是的,我也是这么写的,但你战胜了我。
    • 它是否像递归查询以及如何将结果保存到数据库中,我想先获取所有组织 ID,然后进行查询以将其显示在网格中
    • @Mark 你可以在临时表中插入部分结果
    【解决方案3】:

    由于 MySQL 不支持递归查询/CTE,因此您必须模拟它(也就是说,这并不简单)。

    这是一个关于这个主题的优秀教程:

    http://explainextended.com/2009/03/17/hierarchical-queries-in-mysql/

    我不会在这里复制代码的体面:)

    【讨论】:

      猜你喜欢
      • 2019-12-29
      • 2021-05-19
      • 2022-09-23
      • 2020-06-04
      • 2016-06-10
      • 1970-01-01
      • 2014-07-02
      • 1970-01-01
      • 2012-05-01
      相关资源
      最近更新 更多