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

MariaDB子查询ORDER BY不生效:按FeedId排序查询活动名称求助

问题分析与解决方案

你的SQL写法存在两个核心问题:

  1. 子查询返回多条ActivityId时,id=(...)会直接报错,因为单值比较运算符=只能匹配单个结果;
  2. 就算子查询只返回一条数据,内部的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 17:10:16