在连接轨道上获取错误的记录

时间:2014-02-18 18:34:19

标签: sql ruby-on-rails ruby postgresql

以下是您需要考虑的一些关系:

- User has one profile
- Profile belongs to user

- User has many favourites

我有一些用户ID,我想获取用户最喜欢的个人资料。

尝试了很多不同的查询,我的头开始旋转,这里有一些:

    Profile.select('profiles.id')
    .joins("INNER JOIN users ON profiles.user_id = users.id INNER JOIN favourites 
    ON favourites.user_id = users.id")
    .where("users.id in (?)", some_ids)

我将线条分开以便于阅读。

使用此查询无论我的用户是否已收到我的用户,我仍然会收到这些个人资料。

如果我拿出副本,这个结果会得到相同的结果:

Profile.joins(user: [:favourites]).where('users.id in (?) and favourites.user_id is not null', some_ids)

我将如何做到这一点?

1 个答案:

答案 0 :(得分:0)

你可以试试吗

Profile.select('profiles.id')
    .joins(:favourites)
    .joins("LEFT JOIN users ON profiles.user_id = users.id AND favourites.user_id = users.id")
    .where("users.id in (?)", some_ids)