MariaDB子查询ORDER BY不生效:按FeedId排序查询活动名称求助
问题分析与解决方案
你的SQL写法存在两个核心问题:
- 子查询返回多条
ActivityId时,id=(...)会直接报错,因为单值比较运算符=只能匹配单个结果; - 就算子查询只返回一条数据,内部的
ORDER BY也无法影响外部查询的输出顺序,外部查询没有指定排序规则的话,结果顺序是不可控的。
正确写法一:关联查询保留Feed顺序
直接通过JOIN关联两张表,然后按FeedId排序,这是最直接的解决方案:
SELECT a.name FROM activity a JOIN feed f ON a.id = f.ActivityId WHERE f.TeamId = 16 ORDER BY f.FeedId;
正确写法二:去重后保留顺序
如果同一个活动可能多次出现在feed表中,需要去重显示活动名称,可以加上DISTINCT:
SELECT DISTINCT a.name FROM activity a JOIN feed f ON a.id = f.ActivityId WHERE f.TeamId = 16 ORDER BY f.FeedId;
为什么移除ORDER BY也没用?
因为原SQL的问题根源是用了错误的匹配方式(=匹配多值子查询),而不是ORDER BY本身。就算去掉ORDER BY,子查询返回多条数据时依然会报错,返回单条时结果顺序也不满足需求。
内容的提问来源于stack exchange,提问作者Ne Mo
相关产品推荐
相关产品推荐

