2011-04-07 27 views
0
 EnumID EnumTypeID EnumName EnumParentID 
     1  1   India   0 
     2  2   Gujarat  1 
     3  3   Ahmedabad  2 
     4  3   Bhavnagar  2 
     5  3   Botad   2 
     6  3   Rajkot  2 
     7  1   Australia  0 
     8  2   abc   7 
     9  3   adilade  8 

Here EnumTypeID 1 indicate "Country" 
       2 indicate "State" 
       3 indicate "City" 

以上是我的數據庫,我要像下面如何寫SQL查詢

EnumID Country State City 
    3  India Gujarat Ahmedabad 
    4  India Gujarat Bhavnagar 
    5  India Gujarat Botad 
    6  India Gujarat Rajkot 
    9  Australia abc adilade 

回答

2

你必須使用三個級別的自聯接:

SELECT t3.EnumID AS EnumID, t1.EnumName AS Country, t2.EnumName AS State, t3.EnumName AS City 
FROM table t1 INNER JOIN table t2 ON (t1.EnumID=t2.EnumParentID) 
    INNER JOIN table t3 ON (t2.EnumID=t3.EnumParentID) 
WHERE t1.EnumTypeID=1 AND t2.EnumTypeID=2 AND t3.EnumTypeID=3 

現在,你知道你可能在你的表不一致的信息。假定第二級總是EnumTypeID = 2,第三級總是EnumTypeID = 3。你可能會有錯誤的數據,有父母ID但EnumTypeID = 1(實質上是一個國家內的國家)等

當你有分層數據(即有父鏈接的數據),也指定該層記錄是中,父鏈接和圖層號可能不一致。換句話說,你總是需要確保parent.layer = child.layer - 1 if child.parent = parent。確保您的代碼執行此檢查。

+0

感謝斯蒂芬,但它不能給我的實際結果尋找 – gbbosmiya 2011-04-07 06:28:14

+0

有什麼不對?任何錯誤消息?它是一個畸形的SQL嗎?我們沒有你的數據庫,所以你可能不得不在這裏做一些**工作,你知道! – 2011-04-07 06:30:37

+0

沒有錯我沒有得到任何錯誤,我得到回答,但我的數據的50%是從該查詢我出去放像下面國家\t國家\t市 印度\t古吉拉特邦\t艾哈邁達巴德 印度\t古吉拉特邦\t納加爾 印度retrive \t古吉拉特邦\t博塔德 印度\t古吉拉特邦\t拉傑科德 – gbbosmiya 2011-04-07 06:36:08

2

由城市作爲記錄升序未來或ASC下降明智的或選擇您所需要的所有領域和秩序的結果DESC

Select EnumID,Country,State,City From TableName Order by City Asc 

(asending順序) 選擇EnumID,國家,省份,城市從表名排序按市說明 (降序)

+0

這不是他想要的 - 該表不包含列國家,州或城市。它們被捲成列:EnumTypeId和EnumName – rein 2011-04-07 06:18:33