【问题标题】:Want to exclude from the query some records, but I do not know how想从查询中排除一些记录,但不知道怎么做
【发布时间】:2011-10-02 19:33:03
【问题描述】:

我有三个这样的表:

messages
user_id | message
2       | 'foo'
3       | 'bar'

blacklists
user_id | blacklister_id
1       | 2

users
id      | name
1       | 'me'
2       | 'blacklister'
3       | 'my friend'

我是 - 来自表用户的 id:1 用户。我不想看到来自我添加到黑名单的用户的消息(我在黑名单中添加了 id:2 的用户)。 如何在一个查询中显示一条没有来自黑名单用户(user_id:2)的消息?

现在我在 Rails 中这样做:

  @all_messages = Message.all
  @filter_messages = Array.new
  for message in @all_messages
    @blacklist = Blacklist.where("user_id = ? and blacklister_id = ?",current_user.id,message.user_id).first
    if @blacklist.nil?
      @messages << message
    end  
  end
  return @messages

这真的很糟糕,我想知道如何使用一个 postgresql 查询来重构它。

【问题讨论】:

    标签: sql ruby-on-rails postgresql inner-join outer-join


    【解决方案1】:
    select *
    from messages m
    inner join users u on m.user_id = u.id
    left outer join blacklists b on u.id = b.user_id
    where b.user_id is null
    

    【讨论】:

    • 我添加了“m”。它工作正常!非常感谢! select m.* from messages m inner join users u on m.user_id = u.id left outer join blacklists b on u.id = b.user_id where b.user_id is null
    猜你喜欢
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 2016-05-30
    • 1970-01-01
    • 2021-01-21
    • 2019-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多