Table : user
Id name
1 a
2 b
3 c
4 d
Table : block_user
id block_by block
1 1 2
当我在那时检索用户1的列表时,我不希望用户2在列表中,但我坚持查询: 我希望用户3,4代替它返回被阻止的用户2
我的sql fiddle Fiddle here和我当前的查询
Select u.* from user u JOIN block_user bu on bu.block_by = u.Id or bu.block = u.Id where u.Id != 1 GROUP BY u.Id
答案 0 :(得分:2)
你也可以使用这种非常排序你不必加入表而不是使用
中的地方select * from user where id != 1 and id NOT IN (select block from block_user WHERE block_user.block_by = 1)
答案 1 :(得分:1)
我认为你想要not exists
或left join
。正确的逻辑是:
select u.*
from user u
where u.id <> 1 and
not exists (select 1
from block_users bu
where bu.block_by = 1 and bu.block = u.id
);
答案 2 :(得分:1)
使用这个希望它会帮助你
Array
答案 3 :(得分:-1)
use可以使用嵌套查询,而不是
select * from user where id NOT IN (select block from block_user)