我有三个表:users
,locations
,locations_users
,关联如下:
user has_many locations_users
user has_many locations :through => locations_users
location has_many locations_users
location has_many users :through => locations_users
如何在一个查询中找到加入location_id = 5的所有用户?
任何帮助都将不胜感激。
答案 0 :(得分:2)
您可以使用LEFT OUTER JOIN
。它从左表中获取所有数据,右边是匹配数据,如果存在(如果不存在,则连接列为空):
User
.joins('LEFT OUTER JOIN locations_users ON locations_users.user_id = users.id')
.where('locations_users.id IS NULL OR locations_users.location_id = ?', 5)
.all
Hovewer:
join
,其性能在大表上可能较差(可能两个查询执行速度更快 - 测试它!)答案 1 :(得分:1)
我不知道1种查询方式,但下面的解决方案是有效的。
a = User.where("id NOT IN (?)", LocationUser.pluck("DISTINCT user_id"))
b = LocationUser.where(location_id: 5).pluck("DISTINCT user_id")
result = User.where(id: a+b)