已知province_id为省,city_id为市,country_id为县,都为number类型,有A,B,C三个表,
A中表是存放数据的-有关键字段province_id(number),name为市和县的结合是varchar2类型的,
B中结构像树形表(省--市--县),有id,parent_id,
(id  parent_id
 1        0
 2        1
 3        1
 4        2
 5        1)
现在要插入将A中数据到C表中去,A中province_id已经是对应C中的province_id,
但A中的name就要根据情况从B表中找到相应的市id和县id,然后再对应插入到C表中的city_id,country_id,
(加一点,B表中name和A表中name一样)
如今想根据A,B表中name的情况去查询,语句如下:
1.insert into C(province_id,city_id,county_id)
2.select s.province_id,                                                //省id
3.case when s.provinceid=s.parent_region_id then s.id else 0 end,      //市id
4.case when s.provinceid!=s.parent_region_id then 1 else 0 end         //县id
5.from (select * from A a left join B b on b.name=a.name) s;
关键是3,4行,当这样查出来结果还是不行的,要么是市id出来了而县id没出来,要么是市id没出来而县id出来了
怎样做到让市id和县id都能够有值呢,冥思苦想没结果,诚恳静候大家的解答,谢谢

解决方案 »

  1.   

    用start with ...connect by prior...来实现好了
      

  2.   

    楼上正解 
    用start with id = '已知的部门id' connect by prior id = parentid 把该部门所有的下级部门都查出来了
    start with id = '已知的部门id' connect by prior parentid = id  把该部门所有的上级部门都查出来了
      

  3.   

    看不懂, lz 把 A、B表的部分数据和想要的结果表的数据提供下吧。