我在尝试使用SQLAlchemy进行递归查询时遇到问题。我搜索并重新搜索SO和我找到的每个网站,但我无法找到我需要的东西。
我有两个关系表(在这种情况下不需要第三个):
我想获取容器包含的所有项目。第一个容器可以有子容器(字段可以为null)但是如果容器有子容器,我需要在table1上再次子查询,将subcontainerid作为容器。
SELECT DISTINCT table1.id,
table1.containerid,
table1.subcontainerid,
table1.iditem
FROM table1
START WITH containerid IN (
SELECT table2.id FROM table2 WHERE table2.id = X
)
CONNECT BY PRIOR table1.subcontainerid = containerid
我得到了许多像数据库错误,例如'执行递归WITH查询时检测到循环',但是我最接近的是,在那次尝试中:
table1CTE = table1.query.with_entities(table1.id).\
filter(table1.id == 19076).\
cte(name='table1', recursive=True)
a = aliased(table1CTE, name="sb")
b = aliased(table2, name="bi")
joined = table2.query.with_entities(table2.containerid).\
filter(a.c.id == b.subcontainerid)
cte = a.union(joined)
table2.query.with_entities(table2.id, table2.containerid, table2.iditem).\
select_entity_from(cte).\
all()
但这会返回table1中的所有字段......所以这不是我需要的。
我知道这个问题有点难以理解,所以如果你需要一些东西让它更容易,请告诉我。