如何编写Sql查询

时间:2011-04-07 06:09:24

标签: sql sql-server stored-procedures

      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" 

以上是我的数据库,我希望得到如下结果

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 个答案:

答案 0 :(得分:2)

选择您想要的所有字段并按城市排序作为ASC或DESC的升序或降序记录

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

(发货订单)     从TableName按城市描述选择EnumID,国家,州,城市 (降序)

答案 1 :(得分: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 - 如果child.parent = parent则为1。确保您的代码执行此检查。