数据库 – Rails 3,ActiveRecord,PostgreSQL – “.uniq”命令不起作用?

我有以下查询:
Article.joins(:themes => [:users]).where(["articles.user_id != ?",current_user.id]).order("Random()").limit(15).uniq

并给我错误

PG::Error: ERROR:  for SELECT DISTINCT,ORDER BY expressions must appear in select list
LINE 1: ...s"."user_id" WHERE (articles.user_id != 1) ORDER BY Random() L...

当我更新原来的查询

Article.joins(:themes => [:users]).where(["articles.user_id != ?",current_user.id]).order("Random()").limit(15)#.uniq

所以错误消失了…在MySQL .uniq中,在PostgreSQL中没有.存在任何替代品?

解决方法

由于SELECT DISTINCT的错误状态,ORDER BY表达式必须出现在选择列表中.
因此,您必须明确选择您订购的子句.

这是一个例子,它类似于你的情况,但是泛化一点.

Article.select('articles.*,RANDOM()')
       .joins(:users)
       .where(:column => 'whatever')
       .order('Random()')
       .uniq
       .limit(15)

所以,使用.select()明确地包含你的ORDER BY子句(在这种情况下是RANDOM()).如上所示,为了让您的查询返回文章属性,您还必须明确选择它们.

我希望这有帮助;祝你好运

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...