2015-10-16 54 views
0

我有一個表,如col1,col2,col3,col4,col5。我想選擇col3的不同值,我的查詢如下所示:web2py選擇不同的值

db().select(db.table.col1, db.table.col3, distinct=db.table.col3) 

查詢失敗。

+0

堆棧溢出歡迎:)請與如何提出一個很好的問題familiraize自己。請在你的問題中使用格式。向我們提供關於failes意味着什麼的更詳細的信息 – DawidPi

回答

0

如果將distinct設置爲一個表達式(例如Field對象),則會產生DISTINCT ON SQL語句,我認爲SQL語句不支持該語句。但它應該在PostgreSQL中工作。作爲替代方案,你可以嘗試:

db().select(db.table.col1, db.table.col3, groupby=db.table.col3) 

無論哪種方式,不過,你可能會丟失一些col1不同的值,因爲你沒有做任何的聚集。

0

除了可能在使用@Anthony提到的postgresql時,對於所有其他關係數據庫(afaik)而言,distinct不能應用於結果集的各個字段部分,除此之外的所有字段。 Web2py在參數使用中將其解釋出來。這可以設置爲True,或者設置爲所有請求的字段。正如本書中所引用的,爲了您的方便,我引用了相關內容。

如果你使用SQLite使用groupby由安東尼提到並申請聚集例如:db().select(db.table.col1.max(), db.table.col3.max(), groupby=db.table.col3)

希望這有助於。

從web2py的手冊,aggregates section

不同

隨着說法截然不同=真,你可以指定你只需要選擇不同的記錄。這與使用所有指定字段進行分組的效果相同,只是它不需要排序。當使用不同的時候,不要選擇所有字段,尤其是不要選擇「id」字段,否則所有記錄將始終是不同的。

下面是一個例子:

>>> for row in db().select(db.person.name, distinct=True): 
     print row.name 

亞歷
鮑勃
卡爾
注意,不同也可以是例如表達:

>>> for row in db().select(db.person.name,distinct=db.person.name): 
    print row.name 

亞歷
鮑勃
卡爾

+0

謝謝大家。 groupby爲我工作。 – user3066910