比较两个数据是否一致如果不一致删除交集外的数据

背景:页面数据有个空间需要有个前后比较,如果变化了,需要在数据库中删除交集外的数据,

举例:关联区域下拉框 1 ,2 ,3,级联下拉框 001,002,003这种情况,二级下拉框可以不选择

第一次选择了 1 ,2  第二次选择了2,3  这种场景则需要将 1这种数据删除掉。

第一步:做判定

第二步:取交集

第三步:删除交集外的数据

//查询是否关联设备,如果关联设备判定区域是否同一个,取交集外的然后删除
            ContingencyPlanBase dbResult = contingencyPlanBaseMapper.selectByPrimaryKey(contingencyPlanBaseIDTO.getId());
            if(!dbResult.getAreaType().equals(contingencyPlanBaseIDTO.getAreaType())){
                //更新的区域完全变更了,则需要将原来的设备均删除,不需要关联gridNo
                contingencyPlanDeviceMapper.deleteByPlanId(contingencyPlanBaseIDTO.getId());
            }else{
                //区域相同,但是区域具体分区/网格不同,则删除交集外的数据
                if(Objects.equals(dbResult.getAreaCode(),contingencyPlanBaseIDTO.getAreaCode())){
                    List dbAreaCodeList = Arrays.asList(dbResult.getAreaCode().split(","));
                    List newAreaCodeList = Arrays.asList(contingencyPlanBaseIDTO.getAreaCode().split(","));
                    Set result = dbAreaCodeList.stream()
                            .distinct()
                            .filter(newAreaCodeList::contains)
                            .collect(Collectors.toSet());
                    contingencyPlanDeviceMapper.deleteByPlanIdAndGridNo(contingencyPlanBaseIDTO.getId(),result);
                }
            }

删除交集外的sql如下:

delete from contingency_plan_device
    where plan_id = #{planId}
    
      and grid_no not in
      
        #{gridNo}
      
    

使用not in ,因为是非子查询,因此不会影响sql执行效率!!

你可能感兴趣的:(Java,mysql,sql,mysql,数据库,list)