我现在有一张表,是这样的结构:
id,code,parent_code,parent_id
这张表是接收数据推送的表,推送的数据只包括code和parent_code。id是我在新增时候自动生成的。也就是说我这张表的id,code,parent_code这三个字段都是正确的,但是parent_ic是空的。
当然code和parent_code是父子级的关系。所以id和parent_id也是和code父子级相同对应上。
我现在的需求是,希望能执行个语句,直接更新parent_id。
(不是所有的数据都有父节点,有些数据parent_code是空的。它就是1级)
请大佬们不吝赐教
我假设你的表叫 tes,字段你自己对应改动:
UPDATE tes
SET p_id = (
SELECT id
FROM (
SELECT id, code, p_code
FROM tes
) AS subquery
WHERE subquery.code = tes.p_code
)
WHERE p_code IS NOT NULL;
为了更新parent_id字段,你需要找到每个记录其parent_code在表中作为code存在的记录的id。假设你的表名为my_table,你可以使用一个自连接查询来实现这个需求。
下面是一个示例SQL语句:
UPDATE my_table AS child
JOIN my_table AS parent ON child.parent_code = parent.code
SET child.parent_id = parent.id;
这条语句的工作原理是将表自身与自身做连接,其中子记录(child)的parent_code与父记录(parent)的code相匹配,然后设置子记录的parent_id为匹配到的父记录的id。请确保在运行此操作前备份你的数据,并根据实际情况调整表名和字段名。此外,如果有循环引用或其他可能导致递归的问题(比如层级关系错误),需要预先处理好这些特殊情况