如 this question 中所述,您可以使用字符串文字在 union
中执行 order by
。
例如,这适用于 Oracle:
querypart1 = select([t1.c.col1.label("a")]).order_by(t1.c.col1).limit(limit)
querypart2 = select([t2.c.col2.label("a")]).order_by(t2.c.col2).limit(limit)
query = querypart1.union_all(querypart2).order_by("a").limit(limit)
order-by 可以采用字符串文字,它是联合结果中列的名称。
(分区表中有无数行,我正在尝试对这些该死的东西进行分页)
但是,当针对 SQLite3 运行时,会生成异常:
sqlalchemy.exc.OperationalError: (OperationalError) near "ORDER": syntax error
如何按
并集
的结果排序?
最佳答案
属于联合查询一部分的查询不得排序。
为了能够在复合查询中使用限制,您必须将各个查询包装在单独的子查询中:
SELECT * FROM (SELECT ... LIMIT ...)
UNION ALL
SELECT * FROM (SELECT ... LIMIT ...)
q1 = select(...).limit(...).subquery()
q2 = select(...).limit(...).subquery()
query = q1.union_all(q2)...
关于python - 在 SqlAlchemy SQLite 中按联合查询中的列排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21777730/