2011-10-20 30 views
1

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的子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的子組件。所以我必須找到如果父id是主要組織

我想要做遞歸查詢下

+0

你可以指定你要如何顯示它?因爲在網格中,您只需要用組織的名稱替換父標識。 – gbianchi

+0

我想顯示所有組織名稱,我不想顯示該ID。家長組織org1我想顯示其所有孩子 – Mark

回答

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 ..可能需要tweeked點燃TLE。

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  

你可以保持一個列表上的一個結果,然後獲得distincts。

+0

是的,我只是寫同樣的,但你克服了我。 – Vasya

+0

它是否像遞歸查詢以及如何將結果保存到數據庫,我想先獲取所有組織ID,然後執行查詢以將其顯示在網格中 – Mark

+0

@Mark您可以將部分結果插入臨時桌子 – mbillard

相關問題