我有一个名为Membership的课程。可能有多条记录使用相同的电子邮件。要通过电子邮件检索所有会员记录,我正在创建电子邮件索引并执行:
Membership.where(email: "example@example.com")
上述操作有多贵?有没有更有效的方法呢?
谢谢!
答案 0 :(得分:0)
我认为最有效的方法是使用这样的群组查询:
Membership.select(:email).group(:email).having("count(*) > 1")
这将生成以下查询
SELECT "memberships"."email" FROM "memberships" GROUP BY "memberships"."email" HAVING (count(*) > 1)
这应该适用于PG和MySQL。
希望有所帮助
修改
如果你想看到重复,你可以这样做(在最后加上一个计数)
Membership.select(:email).group(:email).having("count(*) > 1").count
这将为每个电子邮件和重复数量的集合提供如下所示:
{'some@duplicate.com'=> 2,......等}