You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据RightName字段更新Rights表的ParentRightId字段?

解决Rights表中ParentRightId的批量更新问题

你的原语句无法生效的核心原因是关联逻辑错误:你用当前权限RightName的最后一段(如CONFIGURATOR)去匹配其他权限RightName的第一段(如CAROUSEL),这完全不符合父权限的命名规则——父权限的RightName是子权限RightName去掉最后一个_xxx后缀的完整字符串。

正确的更新语句

UPDATE Rights AS r1
LEFT JOIN Rights AS r2 
  ON r2.RightName = SUBSTRING_INDEX(r1.RightName, '_', LENGTH(r1.RightName) - LENGTH(REPLACE(r1.RightName, '_', '')))
SET r1.ParentRightId = r2.rightId
WHERE LENGTH(r1.RightName) - LENGTH(REPLACE(r1.RightName, '_', '')) > 0;

语句说明

  1. 筛选有父节点的权限:LENGTH(r1.RightName) - LENGTH(REPLACE(r1.RightName, '_', '')) 统计当前RightName中的下划线总数,仅处理下划线数>0的权限(根节点无父节点,保持ParentRightId为NULL)。
  2. 提取父权限完整名称:SUBSTRING_INDEX(r1.RightName, '_', 下划线数量) 会截断当前RightName的最后一个下划线及后续内容,得到父权限的完整RightName。
  3. 关联并更新:通过LEFT JOIN匹配到对应的父权限记录,将其rightId赋值给当前权限的ParentRightId。

示例数据验证

执行上述语句后,你的示例数据会被更新为:

rightIdRightNameParentRightId
1CAROUSEL MENUNULL
2CAROUSEL MENU_SALES1
3CAROUSEL MENU_SALES_CONFIGURATOR2

完全符合层级关系的预期。

内容的提问来源于stack exchange,提问作者kixrogu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 06:59:57