我有三个桌子。
users, friends and communityusers
表。
我正在尝试建立一个类似Facebook的群组系统。用户将尝试从朋友列表中搜索他/她的朋友以将其添加到组中。
所以在这里我试图删除那些已经添加到组中的朋友。此处的“群组用户”表为communityusers
。
这是我的communityusers
表的结构。
id | community_id | user_id
我当前查询无法使用该表。
SELECT f.id, u.id as user_id, u.userName, u.firstName, u.lastName, u.profilePic from friends f, users u
WHERE CASE
WHEN f.following_id=1
THEN f.follower_id = u.id
WHEN f.follower_id=1
THEN f.following_id = u.id
END
AND
f.status= 2
AND
(
u.firstName LIKE 's%' OR u.lastName LIKE 's%'
)
此查询返回用户ID 1
的朋友列表,现在我想从communityusers
表中排除过滤的用户。
user_id
表中不应存在此查询中的communityusers
。如何从communityusers
或第三张表中过滤掉?
如果问题不清楚,请告诉我。
任何建议,想法和帮助将不胜感激。 非常感谢。
修改
我的communityusers
表
也从上述查询中选择了user_id = 2
。我想从结果中删除user_id = 2
,因为它存在于communityusers
表中。
我正在尝试创建小提琴,但由于某种原因,它对我不起作用。
再次感谢您。
答案 0 :(得分:1)
在给定条件下尝试对社区用户表使用左联接cu.user_id为空-这将为您提供那些不在communituuser表中的用户
select a.* from
(SELECT f.id, u.id as user_id, u.userName, u.firstName, u.lastName, u.profilePic from friends f inner join users u
on CASE WHEN f.following_id=1 THEN f.follower_id = u.id WHEN f.follower_id=1 THEN f.following_id = u.id
END AND f.status= 2 where u.firstName LIKE 's%' OR u.lastName LIKE 's%')a
left join (select * from communityuser where community_id<>4) cu on a.user_id=cu.user_id
where cu.user_id is null
答案 1 :(得分:1)
@sadek 只需在没有条件的地方使用
SELECT f.id, u.id as user_id, u.userName, u.firstName, u.lastName, u.profilePic
from friends f inner join users u on
CASE WHEN f.following_id=1 THEN f.follower_id = u.id WHEN f.follower_id=1 THEN f.following_id = u.id
END AND f.status= 2
where u.id not in (select distinct user_id from communityusers) and (u.firstName LIKE 's%' OR u.lastName LIKE 's%')