2011-03-31 48 views
0

以下是关于Postgresql的正确语法吗?Postgresql在select/join/group上的语法错误

select p.*, SUM(vote) as votes_count 
FROM votes v, posts p 
where p.id = v.`voteable_id` 
    AND v.`voteable_type` = 'Post' 
group by v.voteable_id 
order by votes_count DESC limit 20 

我在本地安装PostgreSQL的过程,但希望得到这一点早:)

谢谢

回答

3

MySQL是在其标准SQL的诠释宽松了很多比PostgreSQL是。有两个问题与您的查询:

  1. 反引号引用是一个MySQL的东西。
  2. 您的GROUP BY无效。

第一个可以通过简单地删除违规报价来修复。第二个需要更多的工作;从fine manual

GROUP BY存在时,它是无效的SELECT列表中的表达式来指未分组列除了聚集函数内,因为将存在一个以上的可能值返回为未分组列。

这意味着,每列在您的SELECT提到要么必须出现在聚合函数或GROUP BY子句。所以,你必须扩大你的p.*,并确保所有列在GROUP BY,你应该结束了,这样的事情,但与真正的列代替p.column...

select p.id, p.column..., sum(v.vote) as votes_count 
from votes v, posts p 
where p.id = v.voteable_id 
    and v.voteable_type = 'Post' 
group by p.id, p.column... 
order by votes_count desc 
limit 20 

这是一个很常见的问题当从MySQL移动到其他任何东西时。

相关问题