You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写SQL查询关联posts与follow表获取未关注用户的帖子

问题分析

原有查询存在两个核心逻辑错误:

  1. 关联规则错误:你需要匹配的是「帖子发布者ID」和「当前用户关注的人ID」,所以JOIN条件应该绑定posts.u_id和follow.following,同时限定follow表的关注者ID为当前登录用户ID,原关联条件完全错位。
  2. 过滤规则错误:LEFT JOIN后未匹配到关注关系的记录,follow表字段会返回NULL,原条件follows.u_id != '$u_id'会直接过滤掉所有NULL记录,刚好把目标结果排除。
正确查询实现

写法1:LEFT JOIN 修正版(兼容原有写法逻辑)

SELECT posts.id, posts.u_id, posts.title, posts.date 
FROM posts 
LEFT JOIN follow 
ON posts.u_id = follow.following AND follow.u_id = '$u_id'
WHERE follow.following IS NULL

逻辑说明:先将所有帖子和当前用户的关注关系做左关联,能关联上的说明发布者是已关注用户,关联不上(follow.following为NULL)的就是未关注用户发布的帖子,完全匹配需求。代入示例中u_id=2测试,可正确返回用户2、3发布的post2、post4。

写法2:NOT IN 写法(逻辑更直观)

SELECT id, u_id, title, date
FROM posts
WHERE u_id NOT IN (
    SELECT following FROM follow WHERE u_id = '$u_id'
)

逻辑说明:先查询当前用户的所有关注者ID列表,直接筛选发布者不在该列表内的帖子即可。

写法3:NOT EXISTS 写法(大数据量下性能更优)

SELECT p.id, p.u_id, p.title, p.date
FROM posts p
WHERE NOT EXISTS (
    SELECT 1 FROM follow f 
    WHERE f.u_id = '$u_id' AND f.following = p.u_id
)

逻辑说明:和NOT IN逻辑一致,但避免了NOT IN子查询返回NULL时的异常问题,数据量较大时执行效率更高。

内容的提问来源于stack exchange,提问作者Ambiguous Turtle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 00:42:01