Sql 具有多表递归查询的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

我需要在postgres中递归查找父项的所有子项

我有这样一个表结构:

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位于
中。我正在使用该行确保只查询关节表中具有该项目的修饰符。