Sql 想从查询中排除一些记录,但我不知道如何排除

Sql 想从查询中排除一些记录,但我不知道如何排除,sql,ruby-on-rails,postgresql,inner-join,outer-join,Sql,Ruby On Rails,Postgresql,Inner Join,Outer Join,我有三张这样的桌子: 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的-user。我不想看到我添加到黑名单的用户的消息(我在黑名单中添加了id

我有三张这样的桌子:

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的-user。我不想看到我添加到黑名单的用户的消息(我在黑名单中添加了id为2的用户)。 如何在一次查询中显示没有来自黑名单用户(用户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
@all_messages=Message.all
@filter_messages=Array.new
对于@all_消息中的消息
@blacklist=blacklist.where(“user_id=?和blacklister_id=?”,当前_user.id,message.user_id)。首先
如果@blacklist.nil?
@我添加了“m”的消息,效果很好!非常感谢!从消息m中选择m.*内部连接用户u on m.user\u id=u.id左侧外部连接黑名单b on u.id=b.user\u id,其中b.user\u id为空
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