id 组织ID;
parent_id 父ID;
ids 部门的所有上级组织id和该部门的组织id,以逗号分隔
sql表类似于这样,怎么能将ids填充上
该回答引用ChatGPT
可以使用递归查询来填充 ids 字段,对于每个组织,通过查询其父组织的 ids 字段来获取所有上级组织的 ID,并将其与当前组织的 ID 进行拼接。具体的 SQL 查询语句如下:
WITH RECURSIVE org_tree AS (
SELECT id, parent_id, CAST(id AS TEXT) AS ids FROM org WHERE parent_id IS NULL
UNION ALL
SELECT org.id, org.parent_id, org_tree.ids || ',' || CAST(org.id AS TEXT) FROM org JOIN org_tree ON org.parent_id = org_tree.id
)
UPDATE org SET ids = org_tree.ids FROM org_tree WHERE org.id = org_tree.id;
这个查询使用了 WITH RECURSIVE 关键字,定义了一个递归的 CTE(Common Table Expression,通用表达式),名为 org_tree。在 CTE 的初始部分,使用了一个 UNION ALL 操作符,查询出所有的根组织,并将其 ID 转换为字符串后赋值给 ids 字段。接着,在递归部分,将 org_tree 表与 org 表连接,查询每个组织的父组织,然后将父组织的 ids 字段与当前组织的 ID 进行拼接,得到新的 ids 值。最终,使用一个 UPDATE 语句将 org_tree 表中的结果更新回 org 表中,从而填充 ids 字段。
值得注意的是,这个查询假定组织 ID 是整数类型,如果 ID 是其他类型,需要相应地调整查询中的数据类型转换部分。此外,如果组织层级很深或者数据量很大,递归查询可能会导致性能问题,可以考虑使用其他方法来填充 ids 字段。
关联查询后,进行分组合并:wm_concat
可以了解下函数:wm_concat