gpt4 book ai didi

python - 如何防止sqlalchemy中的嵌套查询再次选择表?

转载 作者:行者123 更新时间:2023-11-29 11:09:23 26 4
gpt4 key购买 nike

我为 mysql 编写了一个查询,它实现了我想要的。它的结构有点像这样:

select * from table_a where exists(
select * from table_b where table_a.x = table_b.x and exists(
select * from table_c where table_a.y = table_c.y and table_b.z = table_c.z
)
)

我将查询转换为 sqlalchemy,结果的结构如下:

session.query(table_a).filter(
session.query(table_b).filter(table_a.x == table_b.x).filter(
session.query(table_c).filter(table_a.y == table_c.y).filter(table_b.x == table_c.z).exists()
).exists()
)

这会生成如下查询:

select * from table_a where exists(
select * from table_b where table_a.x = table_b.x and exists(
select * from table_c, table_a where table_a.y = table_c.y and table_b.z = table_c.z
)
)

请注意在最里面的查询中重新选择table_a - 这破坏了预期的功能。

如何阻止 sqlalchemy 在嵌套查询中再次选择表?

最佳答案

将最里面的查询告诉 correlate all except table_c :

session.query(table_a).filter(
session.query(table_b).filter(table_a.x == table_b.x).filter(
session.query(table_c).filter(table_a.y == table_c.y).filter(table_b.x == table_c.z)
.exists().correlate_except(table_c)
).exists()
)

与“自相关”相反,“自相关”仅考虑封闭 Select 中的 FROM 元素, explicit correlation将考虑任何嵌套级别的 FROM 元素作为候选元素。

关于python - 如何防止sqlalchemy中的嵌套查询再次选择表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40870171/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com