SELECT m1.id AS id, m1.pcode as pcode, m1.icon AS icon, ( CASE WHEN (m2.id = 0 OR m2.id IS NULL) THEN 0 ELSE m2.id END ) AS parentId, m1.NAME as name, m1.url as url, m1.levels as levels, m1.ismenu as ismenu, m1.num as num FROM menu_daihou m1 LEFT JOIN menu_daihou m2 ON m1.pcode = m2. CODE INNER JOIN ( SELECT ID FROM menu_daihou WHERE ID IN ( SELECT menuid FROM relation_daihou rela WHERE rela.roleid IN <foreach collection="list" index="index" item="i" open="(" separator="," close=")"> #{i} </foreach> ) ) m3 ON m1.id = m3.id and (m1.pcode in ('mxgl','xhcd_namelist','mxtj','bmxgl','kouche') or m1.code in ('mxgl','xhcd_namelist','xhcd-mid','mxtj','bmxgl','kouche') or m1.`name` = '档案管理') where m1.ismenu = 1 order by levels,num asc </select>
时间: 2024-04-21 16:25:41 浏览: 83
这是一个 SQL 查询语句,用于在 `menu_daihou` 表和 `relation_daihou` 表中获取菜单信息,并按照 `levels` 和 `num` 排序返回结果。语句中用到了左连接、内连接和嵌套查询等 SQL 的基本操作。
具体来说,这个查询语句中的 `<foreach>` 标签是 MyBatis 框架的特殊语法,用于将 Java 中的 List 参数转换为 SQL 语句中的 IN 表达式。在这个查询中,该标签用于将传入的 `list` 参数中的值作为 `relation_daihou` 表中 `roleid` 的查询条件。
该查询语句的具体功能是:获取 `menu_daihou` 表中 `ismenu` 字段为 1 的菜单信息,同时根据传入的 `list` 参数中的 `roleid` 的值,查询关联的菜单信息。同时,还需要满足 `m1.pcode` 字段在指定的值列表中,或者 `m1.code` 字段在指定的值列表中,或者 `m1.name` 字段的值为指定的字符串。
结果中的字段包括菜单 id、菜单编码、菜单图标、父级菜单 id、菜单名称、菜单链接地址、菜单层级、是否为菜单、菜单显示顺序等。其中,`parentId` 的值是根据 `m1.pcode` 字段在 `menu_daihou` 表中查询得到的 `m2.id`,如果查询结果为空,则赋值为 0。
阅读全文