[英]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.