NGPRLIS_DEV_EWMP> SELECT distinct t.id as tmpId, t.* FROM SYS_MENU t CONNECT BY PRIOR t.parent_id = t.id START WITH t.status ='1' [2023-05-30 11:23:37] [72000][1436] ORA-01436: 用户数据中的 CONNECT BY 循环 [2023-05-30 11:23:37] Position: 51 帮我解决
时间: 2024-02-10 18:04:45 浏览: 18
这个错误是由于您的查询中存在循环引用造成的。在您的查询中,连接条件是`t.parent_id = t.id`,这意味着您正在尝试使用父菜单ID连接到其自身的ID上。这将导致无限递归连接,直到超出数据库的最大递归深度或出现错误。
要解决这个问题,您需要检查您的数据,找出哪些菜单项的父级菜单ID指向自身或其后代,然后将其更正。您可以使用一个简单的SQL查询来检查这个问题:
```
SELECT *
FROM SYS_MENU
WHERE CONNECT_BY_ISCYCLE = 1
```
这将返回所有存在循环引用的菜单项。找到这些菜单项后,您需要将它们的父级菜单ID更正为其他有效的菜单项,以解决循环引用问题。
相关问题
<select id="selectTreeByCondition" resultType="com.generalichina.ewmp.api.system.entity.SysMenuEntity"> SELECT distinct t.id as tmpId, t.* FROM SYS_MENU t CONNECT BY PRIOR t.parent_id = t.id START WITH 1 = 1 <if test="data.name!=null and data.name !="""> AND t.name LIKE concat(concat('%', #{data.name}), '%') </if> <if test="data.status!=null"> AND t.status = #{data.status} </if> </select>帮我看看有什么问题
根据你提供的代码,我看到其中可能存在以下问题:
1. XML标签中的 `resultType` 属性值为 `com.generalichina.ewmp.api.system.entity.SysMenuEntity`,但查询语句中使用 `t.*` 返回所有列。如果返回的列与 `SysMenuEntity` 类不匹配,可能会导致类型转换错误。
2. 在 `CONNECT BY PRIOR` 子句中,将 `t.parent_id` 与 `t.id` 进行比较,这可能会导致递归查询出现无限循环的情况。建议将 `t.parent_id` 改为实际的父节点列名。
3. 查询语句中的参数 `data` 是从哪里传递过来的?如果没有正确传递参数,查询可能会出现错误或无法返回正确的结果。
4. 在 `<if>` 标签中的字符串比较操作符 `!=` 应该改为 `<>`,否则可能会导致 SQL 解析错误。
希望我的回答能够帮到你。
SELECT DISTINCT(t.supplier_id) FROM `tb_material_price` t where t.level_name='BB2系列>离心泵' 用mybatisplus代码怎样写
假设你的实体类名为 `MaterialPrice`,可以按照如下方式使用 MyBatis Plus 进行查询:
```java
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
public class MaterialPriceServiceImpl extends ServiceImpl<MaterialPriceMapper, MaterialPrice> implements MaterialPriceService {
@Override
public List<Long> getDistinctSupplierIdsByLevelName(String levelName) {
QueryWrapper<MaterialPrice> wrapper = new QueryWrapper<>();
wrapper.selectDistinct("supplier_id")
.eq("level_name", levelName);
return baseMapper.selectObjs(wrapper);
}
}
```
其中,`getDistinctSupplierIdsByLevelName` 方法用于获取指定 `level_name` 下的不重复的 `supplier_id` 列表。`wrapper.selectDistinct("supplier_id")` 表示查询不重复的 `supplier_id` 列表,`.eq("level_name", levelName)` 表示查询 `level_name` 等于指定值的记录。`baseMapper.selectObjs(wrapper)` 表示执行查询并返回 `List<Long>` 类型的结果。