查询属性结构数据

在MySQL中,尽管没有直接支持Hierarchical Queries的功能,但可以通过left join和递归方法实现属性结构数据的查询。示例展示了如何使用left join查询有限层次的属性结构,并提供了Java方法进行递归查询以获取子节点列表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. Hierarchical Queries 通过CONNECT BY 我们可以方便的查了所有当前节点下的所有子节点。但很遗憾,在MySQL的目前版本中还没有对应的功能。 在MySQL中如果是有限的层次,比如我们事先如果可以确定这个树的最大深度是4, 那么所有节点为根的树的深度均不会超过4,则我们可以直接通过left join 来实现。

例如:

sql = "select organ,totalSum,parentId,yybmc,showindex from (" +
"select yybdm as organ,nvl(totalSum,0) as totalSum,ldepat as parentId,yybmc as yybmc,showindex from YYBDM left JOIN (select yybdm as organ,to_char(sum(nvl(txtTotalSum1,0))+sum(nvl(txtTotalSum2,0))+sum(nvl(txtTotalSum3,0))+sum(nvl(txtTotalSum4,0))+sum(nvl(txtTotalSum5,0))) as totalSum from YYBDM  LEFT JOIN appofcsupp  on ddlorgan = yybdm"
+ " group by yybdm) on yybdm = organ  where dvaldflg = '1'"
+ ") temp connect by prior organ=parentid start with parentid ='-1' ORDER siblings BY showindex";



2. mysql 目前没有类似的功能,所以只能借助其他方法实现

①java 方法

private void findChildList(AssetType parent,List<AssetType> list){
        String hql = "from AssetType a where a.parentAssetType.assetTypeId=? ORDER BY a.sort,a.assetTypeName asc";
        
        List<AssetType> childList = this.assetTypeDao
                                    .getEntityManager()
                                    .createQuery(hql)
                                    .setParameter(1, parent.getAssetTypeId())
                                    .getResultList();
        int size = childList.size();
        if(size>0){
            for (int i = 0; i < size; i++) {
                AssetType assetType = childList.get(i);
                List<AssetType> childs = assetType.getChildAssetType();
                if(childs.size()>0){
                    list.addAll(childs);
                    this.findChildList(assetType, list);//递归查询节点的子节点
                }
            }
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值