【问题标题】:Sort by a column in a union query in SqlAlchemy SQLite按 SqlAlchemy SQLite 中的联合查询中的列排序
【发布时间】:2014-02-14 19:26:40
【问题描述】:

this question 中所述,您可以在unions 中使用字符串文字来执行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

你怎么能order byunion 的结果?

【问题讨论】:

标签: python sql sqlite sqlalchemy union


【解决方案1】:

不能对属于联合查询的查询进行排序。

为了能够在复合查询中使用限制,您必须将各个查询包装在单独的子查询中:

SELECT * FROM (SELECT ... LIMIT ...)
UNION ALL
SELECT * FROM (SELECT ... LIMIT ...)
q1 = select(...).limit(...).subquery()
q2 = select(...).limit(...).subquery()
query = q1.union_all(q2)...

【讨论】:

  • 这是一个 SQLite 限制?
  • @Will:当你对联合进行排序时,组件选择的排序无论如何都没用,你不觉得吗?
  • @MartijnPieters 哎呀,当我写这个问题时忘记了限制;已更新。
  • @Will:对,在 SQLite 中,只有 select-core grammar 可以在 UNION 中使用;不允许ORDER BY
  • @Will:作为 CL。显示,语法允许 子查询 (SELECT * FROM (SELECT ... ORDER BY ... LIMIT ...)。 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-05
  • 1970-01-01
  • 2018-11-06
  • 1970-01-01
  • 1970-01-01
  • 2012-04-10
  • 2021-09-04
相关资源
最近更新 更多