如何编写MySQL查询获取未关注user1的user3?修正查询返回全部用户问题
修正后的MySQL查询方案
先明确原代码的问题:
- 字段名错误:
relationships表中存储关注者ID的字段是followerid,但你写的是followerUserId,导致关联逻辑完全失效 - 缺少过滤条件,没有限定目标用户和未关注的判断规则
以下两种方案都能实现获取未关注user1的user3的需求:
方案一:使用NOT EXISTS子查询
直接检查relationships表中是否存在user3关注user1的记录,不存在则返回user3的信息:
SELECT u.id AS userId, u.name, u.username FROM users u WHERE u.id = 3 AND NOT EXISTS ( SELECT 1 FROM relationships r WHERE r.followerid = u.id AND r.followId = 1 )
替换到你的代码中:
export const getUsers = (req, res) => { const q = `SELECT u.id AS userId, u.name, u.username FROM users u WHERE u.id = 3 AND NOT EXISTS ( SELECT 1 FROM relationships r WHERE r.followerid = u.id AND r.followId = 1 )`; db.query(q, (err, data) => { if (err) return res.status(500).json(err); return res.json(data); }); };
方案二:使用LEFT JOIN + IS NULL
通过左连接关联用户表和关注关系表,筛选出没有对应关注记录的user3:
SELECT u.id AS userId, u.name, u.username FROM users u LEFT JOIN relationships r ON u.id = r.followerid AND r.followId = 1 WHERE u.id = 3 AND r.id IS NULL
替换代码时,只需要把const q里的SQL语句换成上述内容即可。
补充说明
- 这里直接用
user1的ID(1)和user3的ID(3)做条件,是根据你提供的数据表内容确定的 - 两种方案都会仅在user3未关注user1时,返回user3的用户信息
内容的提问来源于stack exchange,提问作者etranz
相关产品推荐
相关产品推荐

