python 树结构 sql_一条sql查出树形结构数据

当前的问题:同一张表中存放省市区县的数据,如何通过一条SQL语句将省市区县都查询出来,

且省级包含所有的市级列表,市级中又包含县级的数据。

想法:利用mybatis集合的嵌套查询(collection)

数据格式如下:

Java实体类如下:

public class Area implements Serializable{

private static final long serialVersionUID = 1L;

/**

* 主键id

*/

private Integer id;

/**

* 地区名称

*/

private String name;

/**

* 地区编码

*/

private Integer areaId;

/**

* 上一级地区编码

*/

private Integer parentId;

/**

* 下一级地区列表

*/

private List subAreas;

...getter 和 setter 方法...

}

xml:

支持两层嵌套的例子

select

a.id, a.name, a.area_id,

b.id bid, b.name bname, b.area_id barea_id

from area a

left join area b on b.parent_id = a.area_id

where a.parent_id is null

测试方法:

public class MybatisTest {

@Test

public void test(){

ApplicationContext application =

new ClassPathXmlApplicationContext("classpath*:spring/applicationContext.xml");

AreaMapper areaMapper = application.getBean(AreaMapper.class);

List areaList = areaMapper.queryAllCity();

System.out.println(areaList.size());

System.out.println(areaList.get(0).getSubAreas().size());

System.out.println(JsonUtils.objectToJson(areaList));

}

}

运行结果:

结论:

从上面的的测试数据可以看出已经支持两层嵌套,但是如果还要往id为“areasOther”的的中再嵌套一层,目的是支持三层嵌套,暂时不知道如何操作???

尝试失败的案例:

select

a.id, a.name, a.area_id,

b.id bid, b.name bname, b.area_id barea_id,

c.id cid, c.name cname, c.area_id carea_id

from area a

left join area b on b.parent_id = a.area_id

left join area c on c.parent_id = b.area_id

where a.parent_id is null

以上案例并没有成功,不知道是不是queryAllCity的sql语句书写问题,请大牛指点!

另一种支持多层嵌套的方式:

select="queryCityByParentId">

select

a.id, a.name, a.area_id, a.parent_id

from area a where a.parent_id = #{area_id}

select

a.id, a.name, a.area_id, a.parent_id

from area a where a.parent_id is null

以上方式在collection中将select指定的查询语句循环调用,查询条件为column的数据,最终将查询的结果放到property指定的属性中

执行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值