簡體   English   中英

將 SQL 轉換為 Rails 查詢

[英]Convert SQL to Rails Query

我正在嘗試將以下 SQL 查詢轉換為 Rails 可以理解的內容:

SELECT posts.* FROM 
(
SELECT group_id, MAX(updated_at) AS updated_at FROM posts WHERE group_id IN (4, 6, 9) GROUP BY group_id
) AS latest_posts 
INNER JOIN posts ON 
latest_posts.group_id = posts.group_id AND 
latest_posts.updated_at = posts.updated_at;

model 的名稱是Post 我的嘗試:

Post.select("(SELECT group_id, MAX(updated_at) AS updated_at FROM posts WHERE group_id IN (4, 6, 9) GROUP BY group_id) AS latest_posts")
.joins('INNER JOIN posts ON latest_posts.group_id = posts.group_id AND latest_posts.updated_at = posts.updated_at')

錯誤:

Error:
UserTest#test_feed_should_have_the_right_posts:
ActiveRecord::StatementInvalid: PG::DuplicateAlias: ERROR:  table name "posts" specified more than once

    test/models/user_test.rb:100:in `block in <class:UserTest>'

更新:關閉但沒有雪茄。 令人沮喪。

irb(main):046:0> Post.select("posts.* FROM (SELECT group_id, MAX(updated_at) AS updated_at FROM posts WHERE group_id IN (4, 6, 9) GROUP BY group_id) AS latest_posts").joins("INNER J
OIN posts  ON  latest_posts.group_id = posts.group_id  AND  latest_posts.updated_at = posts.updated_at")

產生:

SELECT posts.* FROM 
(SELECT group_id, MAX(updated_at) AS updated_at FROM posts WHERE group_id IN (4, 6, 9) GROUP BY group_id)
 AS latest_posts 
FROM "posts" 
INNER JOIN posts  
ON  latest_posts.group_id = posts.group_id  AND  latest_posts.updated_at = posts.updated_at

嘗試

Post.select("(SELECT group_id, MAX(updated_at) AS updated_at FROM posts p1 WHERE group_id IN (4, 6, 9) GROUP BY group_id) AS latest_posts")
.joins('INNER JOIN posts p2 ON latest_posts.group_id = p2.group_id AND latest_posts.updated_at = p2.updated_at')

我懷疑通過對“posts”表的兩個單獨引用進行別名,那么查詢將被 Rails 接受

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM