2015-10-16 51 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