Sql 具有多表递归查询的Postgres
我需要在postgres中递归查找父项的所有子项 我有这样一个表结构:Sql 具有多表递归查询的Postgres,sql,postgresql,recursive-query,Sql,Postgresql,Recursive Query,我需要在postgres中递归查找父项的所有子项 我有这样一个表结构: items ----- id modifiers --------- id item_modifiers -------------- id item_id modifier_id modifier_items -------------- id item_id modifier_id 项具有多个子项修改器到项修改器 修饰符有许多子项到修饰符项 所以基本上层次结构是这样的:item->item\u modifiers
items
-----
id
modifiers
---------
id
item_modifiers
--------------
id
item_id
modifier_id
modifier_items
--------------
id
item_id
modifier_id
项具有多个子项修改器
到项修改器
修饰符有许多子项
到修饰符项
所以基本上层次结构是这样的:item->item\u modifiers->modifier->modifier\u items->item
我有这个但没用。不知道该换什么
WITH RECURSIVE search_tree(id, path) AS (
SELECT "items".id, ARRAY["items".id]
FROM items
WHERE "items".id ='#{top_level_item.id}'
UNION ALL
SELECT #{table_name}.id, path || #{table_name}.id
FROM search_tree
INNER JOIN modifier_items
ON "search_tree".id = "modifier_items".item_id
WHERE "modifier_items".modifier_id IN (
SELECT "modifiers".id
FROM modifiers
INNER JOIN item_modifiers ON "modifiers".id = "item_modifiers".modifier_id
WHERE "item_modifiers".item_id = "search_tree".id
)
WHERE NOT #{table_name}.id = ANY(path)
)
SELECT id FROM search_tree ORDER BY path
有什么想法吗?你能告诉我你想要得到什么结果吗?我不确定这部分是否必要:
其中的“修饰符项目”。修饰符id位于
中。我正在使用该行确保只查询关节表中具有该项目的修饰符。