換句話說,任何複雜的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. 是否有可能在SELECT語句中計算日期範圍?
- 4. 是否有可能訪問在Python中被覆蓋的原始函數
- 5. 「go test」報告不正確的語句覆蓋範圍
- 6. 原型覆蓋範圍問題
- 7. Javascript關閉 - 從全局範圍覆蓋的功能的行爲
- 8. 爲什麼原始指針值被覆蓋/超出範圍
- 9. Rails覆蓋默認範圍全局
- 10. 完全覆蓋Rails中的集合ActiveRecord
- 11. 單個SQL語句 - 是否有可能?
- 12. 是否可以在全局覆蓋print()?
- 13. 代碼覆蓋範圍和節點覆蓋範圍
- 14. Postgres sql查詢代碼覆蓋範圍
- 15. 將SQL查詢覆蓋日期範圍
- 16. 可變範圍if語句
- 17. 全局覆蓋打印語句python
- 18. 筆 - 爲多個SQL語句的範圍
- 19. 爲什麼我的覆蓋層覆蓋了一些元素,但不是全部?
- 20. Ruy on Rails - SessionsHelper的範圍是否覆蓋模型?
- 21. 覆蓋active_admin中的默認範圍form.has_many
- 22. 叮噹中的代碼覆蓋範圍
- 23. codecov.io中的代碼覆蓋範圍
- 24. Hudson中的Java代碼覆蓋範圍
- 25. Odoo:如何覆蓋原始功能
- 26. ActiveRecord的: 「凡在」 SQL語句
- 27. ActiveRecord的範圍
- 28. Yii2綁定參數去了現場的原始SQL語句
- 29. proc SQL語句的where子句中的日期範圍
- 30. Laravel代碼覆蓋範圍
啊我看到了,技術上是的(如果你要在ruby中進行循環),但在應用程序中,性能成本太高了。非常感謝真實世界的生產例子。 – Jason