sql - 如何在 SQL 中编写以下 Rails 查询?

标签 sql ruby-on-rails ruby-on-rails-3 postgresql

我有以下 Rails 查询:

Org.find(:all).each do |org|
    Org.update_counters org.id, :users_count => org.users.length
end

出于各种原因,比如性能,我需要用 SQL 编写它,这样我就可以执行 SQL,而不是用户 Rails 来进行更新。有什么想法可以将 rails loger 组合成 sql 吗?

谢谢

最佳答案

这个:

Org.update_counters org.id, :users_count => org.users.length

基本上是这样做的:

update orgs
set users_count = coalesce(users_count, 0) + #{org.users.length}
where id = #{org.id}

展开一步:

update orgs
set users_count = coalesce(users_count, 0)
                + (select count(*) from org_users where org_id = #{org.id})
where id = #{org.id}

现在您已将其包装在 Org.find(:all).each 中,因此我们只需将迭代插入 SQL 并处理 #{org.id} :

update orgs o
set users_count = coalesce(users_count, 0)
                + (select count(*) from org_users ou where ou.org_id = o.id)

如果您真的想设置 users_count 值而不是增加它们:

update orgs o
set users_count = (select count(*) from org_users ou where ou.org_id = o.id)

关于sql - 如何在 SQL 中编写以下 Rails 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9389515/

相关文章:

ruby-on-rails - Rails 引擎中的 Gem 依赖项

ruby-on-rails - Rails - 如何在文本字段中执行 If 和 else 语句

mysql - 使用 Excel 进行数据转换

SQL 列出 A 列出现多次但具有不同 B 列值的所有行

mysql - 使用 Rails 创建类似电子表格的表单

ruby-on-rails - 如何在Prawn中设置表头?

ruby-on-rails - 如何在 Rails 3 和 postgres 中处理大整数

ruby-on-rails - Rails 中的 Constantize 和 ruby​​ 中的 Constant 之间的区别

mysql - 如何管理数据库中的日程数据结构?

sql - 与联合所有SQL查询获取错误 'Column specified multiple times'