activerecord 中的子查询 [英] Subqueries in activerecord

查看:49
本文介绍了activerecord 中的子查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用 SQL 我可以很容易地做这样的子查询

With SQL I can easily do sub-queries like this

User.where(:id => Account.where(..).select(:user_id))

这会产生:

SELECT * FROM users WHERE id IN (SELECT user_id FROM accounts WHERE ..)

如何使用 rails 的 3 activerecord/arel/meta_where 来做到这一点?

How can I do this using rails' 3 activerecord/ arel/ meta_where?

我确实需要/想要真正的子查询,没有 ruby​​ 解决方法(使用多个查询).

I do need/ want real subqueries, no ruby workarounds (using several queries).

推荐答案

Rails 现在默认这样做 :)

Rails now does this by default :)

Message.where(user_id: Profile.select("user_id").where(gender: 'm'))

将产生以下SQL

SELECT "messages".* FROM "messages" WHERE "messages"."user_id" IN (SELECT user_id FROM "profiles" WHERE "profiles"."gender" = 'm')

(现在"所指的版本号很可能是3.2)

(the version number that "now" refers to is most likely 3.2)

这篇关于activerecord 中的子查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆