ActiveRecord复杂的SQL语句

时间:2014-10-29 00:46:33

标签: sql ruby-on-rails

AR可以管理如下的复杂陈述吗?

SELECT COUNT(P2.emp) AS indentation, P1.emp
FROM Personnel AS P1, Personnel AS P2
WHERE P1.lft BETWEEN P2.lft AND P2.rgt
GROUP BY P1.emp
ORDER BY P1.lft;

来自:http://www.ibase.ru/devinfo/DBMSTrees/sqltrees.html

我的SQL变体是:

SELECT COUNT(R2.name) AS indentation, R1.name FROM Regions AS R1, Regions AS R2 WHERE R1.lft BETWEEN R2.lft AND R2.rgt GROUP BY R1.name ORDER BY R1.lft

我找到了以下内容,但不知道如何将它们全部链接在一起。

.count(R2.name)
.where(R1.lft: R2.lft..R2.rgt)
.group("R1.name")
.order("R1.lft")

1 个答案:

答案 0 :(得分:1)

是。您使用的所有SQL关键字(包括隐含连接)都应记录在Active Record Query Interface指南中。如果您发现任何不是,请告诉我。

对于BETWEEN可以使用ruby的Range对象,但您可能希望使用显式比较运算符。我认为这是个人风格的问题。

一旦您学会了如何手动构建这些查询,请查看可以为您构建它们的awesome_nested_set之类的宝石。