根据嵌套对象的逻辑查找对象列表

时间:2018-04-05 20:06:55

标签: sql postgresql rails-activerecord

我有教练,我有团队,我有赞助商。

教练可以有很多球队。 球队可以有很多赞助商 赞助商有1个registration_method

我很难找到所有没有球队的球队,这些球队的赞助商的注册方式设置为'电子邮件'(我知道......其粗糙)

我的sudo代码是:

  

找到拥有赞助商的团队的所有教练,这些赞助商没有将注册方法设置为“电子邮件”

我在这里尝试过psql并且到目前为止没有运气。

SELECT users.* 
FROM users 
WHERE (users.roles @> '{coach}')" 
AND WHERE (users.teams.sponsors.registration_method != '{email}')

我对SQL查询的了解很少(你可能会说)并且我一直在努力。有人会有任何想法如何提供帮助吗?

1 个答案:

答案 0 :(得分:0)

我完全猜测你的桌子结构,所以如果你能澄清这将是一个很大的帮助。从理论上讲,假设你有一个用户表,团队,赞助商和注册方法,这样的查询应该让所有没有至少一个赞助商的教练注册方法是电子邮件:

select
  u.*
from
  users u
where
  u.role @> array['coach'] and
  not exists (
    select null
    from
      teams t
      join sponsors s on < whatever >
      join registration_methods r on < whatever >
    where
      u.user_id = t.coach_id and
      r.registration_method = 'email'
)

关键是半连接(not exists),它将产生与所描述条件不匹配的所有内容。

如果它是一个大表(带数组)作为你的问题提示,那么这就是一匹不同颜色的马。