gpt4 book ai didi

mysql - 在 Rails ActiveRecord 中寻找 where.not.any 的正确查询

转载 作者:行者123 更新时间:2023-11-29 05:05:52 25 4
gpt4 key购买 nike

初学者 Rails 问题。
我有一张用户表和一张团队表。

一个用户有多个团队,团队属于用户。

我想查询一个用户是否没有团队。我正在使用这个查询:

    User.joins(:teams).where.not(teams: {team_name: 'coconuts'})

除非用户有多个团队,否则此方法有效。
例如,用户 Bill 在椰子团队和面包果团队。
上面的查询在 Bill 应该被排除在外时返回 Bill,因为他在椰子团队中。

我知道为什么会这样,但我无法想到适用于这种情况的另一个查询。
抓取这些数据的正确方法是什么?
我正在使用 Rails 4。

最佳答案

尝试以下操作,请考虑简单干净的代码性能:

team = Team.find_by(name: 'coconuts')

excluded_user_ids = team.user_ids
User.where.not(id: excluded_user_ids)

# If you want more a little bit efficiently and suppose you have the join model `Membership`
excluded_user_ids = team.memberships.pluck(:user_id)

# Or if you want more efficiently (just 1 query) and suppose you're using Postgresql
User
.left_outer_joins(:teams)
.group('users.id')
.select("users.*, count(teams.id) AS count_foo, count(teams.id) filter (where teams.name = 'coconuts') AS count_bar")
.having('count_foo != count_bar')

关于mysql - 在 Rails ActiveRecord 中寻找 where.not.any 的正确查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48452340/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com