检索分层数据



我有一个区域代码,可以在一个查询中根据类型选择区域。

place

regionname regiontype placeid parentplaceid
-------------------------------------------
Chennai    city        4        2
Bangalore  city        3        1
TamilNadu  state       2        2
Karnataka  state       1        1

Country

countryname State
India       TamilNadu
India       Karnataka
select  c.countryname, p.regionname, c.State
from place p,
     country c
where p.regionname = c.State

预期:

India       TamilNadu   TamilNadu
India       Karnataka   Karnataka
India       Chennai     TamilNadu
India       Bangalore   Karnataka

实际

India       TamilNadu   TamilNadu
India       Karnataka   Karnataka

这似乎相当复杂。 你可以用union all做你想做的事——一部分用于州,一部分用于城市。

select c.countryname, p.regionname, p.state
from place p join
     country c
     on p.regiontype = 'state' and
        p.regionname = c.state
union all
select c.countryname, p.regionname, ps.state
from place p join
     place ps
     on p.parentplaceid = ps.placeid and
        p.regiontype = 'city' and
        ps.regiontype = 'state' join
     country c
     on ps.regionname = c.state;

最新更新