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