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

如何用MySQL更新每行parent_id为对应父目录的cat_id?

解决JDownloads分类表parent_id赋值的MySQL问题

我来帮你搞定这个更新parent_id的问题!根据你的需求,我们需要给每行的parent_id赋值为其cat_dir_parent对应目录的cat_id,如果找不到匹配的父目录就设为0。你之前用内连接的方式有个关键问题:内连接只会更新能找到匹配父目录的行,那些没有匹配的行根本不会被修改,所以得换成左连接配合COALESCE函数来处理空值场景。

正确的MySQL UPDATE语句

UPDATE joomla_jdownloads_cats_backup t1
LEFT JOIN joomla_jdownloads_cats_backup t2
ON t1.cat_dir_parent = t2.cat_dir_name
SET t1.parent_id = COALESCE(t2.cat_id, 0);

语句详细说明

  • 自连接逻辑:把表自身关联起来,t1是需要更新的主表,t2专门用来查找每个目录对应的父目录cat_id,关联条件是t1.cat_dir_parent等于t2.cat_dir_name(也就是父目录的名称)。
  • 处理无匹配场景:COALESCE(t2.cat_id, 0)的作用是,如果t2.cat_id为NULL(意味着找不到对应的父目录),就返回0;否则返回找到的cat_id,完美贴合你的规则。
  • 覆盖所有行:左连接(LEFT JOIN)会保留t1的所有行,不管有没有匹配的t2行,这样所有行的parent_id都会被更新,不会遗漏任何一条数据。

验证你的示例数据

假设你的正确示例数据为(修正了可能的排版误差):

cat_dir_parentcat_dir_namecat_idparent_id
MyRootDirdir11?
MyRootDirdir22?
MyRootDir3?

执行上面的SQL后,结果会变成:

cat_dir_parentcat_dir_namecat_idparent_id
MyRootDirdir113
MyRootDirdir223
MyRootDir30

完全符合你的期望!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:43:45