我需要使用Arel以
形式生成SQLSELECT c2.user_id, MAX(c2.created_at) as max_created_at
FROM comments AS c2
GROUP BY c2.user_id
在较大的查询中用作子查询
SELECT *
FROM comments
INNER JOIN (...subquery...) s1
ON comments.user_id = s1.user_id
AND comments.created_at = s1.max_created_at
我无法弄清楚如何在子查询中对comments
表进行别名。
我能得到的最接近的是
c2 = Comment.arel_table.alias
s1 = Comment.arel_table.project(
c2[:user_id], c2[:created_at].maximum.as('max_created_at')
).group('user_id').as('s1')
但这会生成错误的SQL
SELECT c2.user_id, MAX(c2.created_at) as max_created_at
FROM comments
GROUP BY c2.user_id
(错误,因为未定义c2)
生成没有别名的查询会导致不正确的结果,因为子查询内外的表名会发生冲突。
这会导致Arel::TableAlias
对project
方法的错误。
s1 = c2.project(...
如何使用Arel查询别名表?
答案 0 :(得分:3)
您可以使用from
告诉它从哪个表(或在本例中为表别名)进行投影:
myarray = (3,2,1)
sorttime = %timeit -n1 -r3 -o myarray.sort()
print(sorttime.best)