1

我正在尝试找到计算拥有一个(或多个)has_many 关系实例的用户数量的最佳方法。

例如,用户has_many :bank_accounts:credit_accounts(以及其他一些关系)。我想找到至少拥有一个 bank_account 和至少一个 credit_account 的唯一用户的数量,并理想地在一个范围内实现这一点,这样我就可以在其上运行 where 查询。

目前我正在使用以下代码实现它(很差): (BankAccount.select(:user_id).uniq + CreditAccount.select(:user_id) + ...).uniq.count

我已经玩了很多连接,但是我没有得到任何结果。例如,我玩弄了很多不同形式的,User.joins(:bank_accounts, :credit_accounts).uniq('users.id').count但我似乎没有得到任何结果。

任何帮助将不胜感激,谢谢!

4

2 回答 2

0

如果您对使用普通 sql 没问题。您可以使用以下查询

select distinct(user_id) from 
(select user_id from bank_accounts union select user_id from credit_accounts) a;

我不确定是否存在为此的rails方式。

于 2013-10-02T17:45:39.720 回答
0

在这种情况下,我们只需要一个INNER JOIN具有 credit_accounts 和 bank_accounts 的用户。

User.joins(:credit_accounts, :bank_accounts).uniq.count

上面的查询对我有用。该查询生成的sql如下

"SELECT DISTINCT COUNT(DISTINCT `users`.`id`) FROM `users`.* FROM `users` INNER JOIN `credit_accounts` ON `credit_accounts`.`user_id` = `users`.`id` INNER JOIN `bank_accounts` ON `bank_accounts`.`user_id` = `users`.`id`"
于 2013-10-02T18:25:15.637 回答