换句话说,任何复杂的sql语句(非数据库特定的SQL代码)是否可以分解为组成ActiveRecord语句?为了论证的缘故,我没有考虑性能或对数据库的多次调用(当然这可以通过原始SQL来避免)。ActiveRecord的语句是否覆盖了原始sql中可能的全部范围?
0
A
回答
2
不,尽管Active Record可以很好地抽象出大部分抽象,但有些调用是数据库特有的,不能像你提到的那样被抽象化。其他人只是不能代表。像SQL CASE调用一样,是我无法用Active Record重建的代码示例。在一个相当大的数据集(~30000)上,循环是不可能的,因为与SQL的速度相比,它运行时间超过20秒。
SELECT t.price_range AS price_range, count(*) as total FROM
(
SELECT
CASE
WHEN (price >= '0.00' AND price < '25.00') THEN '0-25'
WHEN (price >= '25.00' AND price < '50.00') THEN '25-50'
ELSE '50+'
END AS price_range
FROM products p
RIGHT JOIN
product_categories pc
ON
p.id = pc.id
) t group by t.price_range
我会建议使用the docs和一些判断来做出关于何时使用SQL的决定。
1
Re:ActiveRecord的声明是否覆盖了原始sql中可能的全部范围?
绝对不是。例如Union语句等,但有一个很好的解决方法:将复杂的SQL创建为SQL视图。然后使用ActiveRecord访问视图。
根据视图的dbms和SQL,AR模型可能需要也可能不需要标记为ReadOnly。
相关问题
- 1. golang - 代码覆盖率始终显示范围:语句
- 2. 覆盖语法定义中的范围?
- 3. Javascript关闭 - 从全局范围覆盖的功能的行为
- 4. 为什么原始指针值被覆盖/超出范围
- 5. Rails覆盖默认范围全局
- 6. 完全覆盖Rails中的集合ActiveRecord
- 7. 代码覆盖范围和节点覆盖范围
- 8. 可变范围if语句
- 9. Postgres sql查询代码覆盖范围
- 10. 是否可以在全局覆盖print()?
- 11. 全局覆盖打印语句python
- 12. 笔 - 为多个SQL语句的范围
- 13. Hudson中的Java代码覆盖范围
- 14. ActiveRecord的范围
- 15. proc SQL语句的where子句中的日期范围
- 16. BullsEye代码覆盖范围
- 17. W3C通知覆盖范围
- 18. C#if语句范围内的语句
- 19. 是否有可能覆盖网格系统使用全宽
- 20. Modernizr是否覆盖了CSS的前缀?
- 21. Object.assign覆盖原始引用?
- 22. java的switch语句范围
- 23. 使用语句的范围
- 24. 排除覆盖范围内的'else'子句
- 25. 覆盖NCalc中的“if”语句
- 26. Go sql - 准备语句范围
- 27. 是否有可能阻止Django围绕原始SQL参数添加引号?
- 28. 是否可以覆盖NSUserDefault?
- 29. 是否有可能蒙上范围
- 30. 是否有可能覆盖c#中的winform面板的填充?
啊我看到了,技术上是的(如果你要在ruby中进行循环),但在应用程序中,性能成本太高了。非常感谢真实世界的生产例子。 – Jason