MySQL查询:获取首表中与指定用户无关联的非自身用户列表
MySQL查询需求与实现
数据表结构与数据
first_table(用户信息表)
ID | FullName | Gender | Status -------------------------------- 1 Mr. Jhon M Active 2 Mr. Cena M Active 3 Mrs. Lye F Active 4 Mr. Shaw M Active 5 Mr. BigB M Active
second_table(用户关联记录表)
ID | Sender_ID | Receiver_ID | Status ------------------------------------- 1 1 2 Send 2 2 3 Receive 3 2 4 Accept 4 4 3 Blocked 5 5 3 Waiting
查询需求
当指定用户ID为4时,从first_table中筛选满足以下条件的用户:
- 排除指定用户自身(ID=4)
- 排除所有在
second_table的Sender_ID或Receiver_ID列中与ID=4存在关联的用户
预期查询结果
ID | FullName | Gender | Status -------------------------------- 1 Mr. Jhon M Active 5 Mr. BigB M Active
解决方案(MySQL查询语句)
SELECT ft.ID, ft.FullName, ft.Gender, ft.Status FROM first_table ft WHERE ft.ID != 4 AND ft.ID NOT IN ( -- 找出所有与ID=4有发送/接收关联的用户 SELECT Sender_ID FROM second_table WHERE Receiver_ID = 4 UNION SELECT Receiver_ID FROM second_table WHERE Sender_ID = 4 );
逻辑说明
- 外层查询通过
ft.ID != 4直接排除指定用户自身 - 子查询分两部分获取关联用户:
- 第一部分提取所有将ID=4作为接收方的发送者
- 第二部分提取所有将ID=4作为发送者的接收者
- 用
UNION合并结果并自动去重,得到完整的关联用户列表
- 外层查询通过
NOT IN排除上述关联用户,最终得到符合要求的结果
内容的提问来源于stack exchange,提问作者Muhammad Hassan
相关产品推荐
相关产品推荐

