2014-02-14 58 views
2

this question中所述,您可以使用字符串文字在union中執行order by按SqlAlchemy中的聯合查詢中的列進行排序SQLite

例如,這可與甲骨文:

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) 

的順序,由可以採取一個字符串,它是在聯合的結果列的名稱。

(有在分區表中的行gazillions和我想分頁該死的東西)

當對SQLite3的運行,但是,這會產生一個例外:

sqlalchemy.exc.OperationalError: (OperationalError) near "ORDER": syntax error 

你怎麼能這樣order byunion的結果?

回答

3

作爲聯合查詢一部分的查詢不得排序。

爲了能夠使用複合查詢範圍內,則必須換個人查詢一個單獨的子查詢中:

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

這是一個SQLite的限制? – Will

+0

@Will:當你對工會進行分類時,組件選擇的順序無用,你不覺得嗎? –

+0

@MartijnPieters當我寫下問題時忘記了限制;更新。 – Will

相關問題