MySQL复杂选择查询过滤从第三张表

时间:2018-09-25 06:35:51

标签: mysql rdbms

我有三个桌子。

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或第三张表中过滤掉?

如果问题不清楚,请告诉我。

任何建议,想法和帮助将不胜感激。 非常感谢。

修改

运行查询后,我得到 enter image description here

我的communityusers

enter image description here

也从上述查询中选择了user_id = 2。我想从结果中删除user_id = 2,因为它存在于communityusers表中。

我正在尝试创建小提琴,但由于某种原因,它对我不起作用。

再次感谢您。

2 个答案:

答案 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%')