2009-10-25 42 views
0

我想從使用MySQL轉換到使用PostgreSQL。我有這種類型的結構:如何最好地解決PostgreSQL的更嚴格的分組問題

用戶(實體) - >按 - >企業(實體) - >故事

用戶需要看到所有的新聞更新推出了由他們按照業務。以下查詢對MySQL非常有用,因爲它僅顯示story.id中的所有關聯故事和組。不幸的是,由於PostgreSQL在SQL標準的解釋中更加直接,如果我想要執行GROUP BY子句,我需要使用DISTINCT子句分別詢問每個字段。

Story.find(:all, :joins => { :entity => { :followers => :follower } }, :conditions => ['followers_follows.id = ?', 4], :group => 'stories.id')

PostgreSQL的吐出:「ERROR:列‘stories.entity_id’必須出現在GROUP BY子句或聚合函數中使用」

不必指定每個字段單獨看起來不太優雅。如果任何人都可以給我一個乾淨的方式來獲得與MySQL相同的結果,而不必訴諸重複的字段(刪除組),或者必須指定每個單獨的字段以及DISTINCT子句,我將不勝感激!

謝謝!

+3

除了MySQL之外,其他每個數據庫都要求你指定所有沒有應用於它們的聚合函數的列,以包含在GROUP BY語句中。 – 2009-10-25 00:49:37

回答

1

那麼,我當然不會說PostgreSQL對SQL標準的解釋太嚴格了。事實上,這是相反的。

這裏是一個可能的解決方案:

Story.all(:joins => { :entity => { :followers=> :follower } }, 
      :conditions => ['followers_follows.id = ?', 4], 
      :group => Story.column_names.map { |c| "stories.#{c}" }.join(', ')) 

但也有許多可供選擇的查詢。幾周前我在博客上發表了這篇文章。這裏的帖子:http://awesomeful.net/posts/72-postgresql-s-group-by

+0

看起來它會起作用!謝謝! 而且我可能會添加......我並不打算說PostgreSQL太嚴格地執行該標準。如果有什麼我試圖暗示MySQL不嚴格遵守標準,我不得不改變我的思維方式。 – rwl4 2009-10-26 04:09:10

相關問題