为何SQL查询无输出?需查询指定用户关联的限定数量帖子
问题排查与解决方案
无输出的原因
- 你的查询语句中
WHERE uid = (SELECT id FROM users存在逻辑错误:子查询SELECT id FROM users会返回多个用户ID(1、2、3),而=运算符要求右侧必须是单个值,导致条件永远无法匹配,因此没有任何输出。 - 同时当前查询完全未实现「最多10个用户+每个用户最多10条帖子」的需求。
正确的查询实现
以下是针对需求的两种实现方式,适配不同数据库环境:
方法1:使用窗口函数(支持MySQL 8+、SQLite 3.25+、PostgreSQL等)
-- 先筛选最多10个用户,再对每个用户的帖子取前10条 SELECT u.id AS user_id, u.name, p.id AS post_id, p.post FROM ( SELECT id, name FROM users LIMIT 10 -- 限制最多10个用户 ) u JOIN ( SELECT id, post, uid, ROW_NUMBER() OVER (PARTITION BY uid ORDER BY id) AS post_rank FROM posts ) p ON u.id = p.uid WHERE p.post_rank <= 10; -- 每个用户最多保留10条帖子
方法2:兼容旧版数据库(如MySQL 5.x)
如果你的数据库不支持窗口函数,可使用关联子查询实现:
SELECT u.id AS user_id, u.name, p.id AS post_id, p.post FROM (SELECT id, name FROM users LIMIT 10) u JOIN posts p ON u.id = p.uid WHERE ( SELECT COUNT(*) FROM posts p2 WHERE p2.uid = p.uid AND p2.id <= p.id ) <= 10;
内容的提问来源于stack exchange,提问作者Shrey Jain
相关产品推荐
相关产品推荐

