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

编写查询最大唯一数的SQL时,UNION ALL语法报错求助

问题分析与解决

语法错误原因

你写的SQL报错是因为MySQL不允许在UNION/UNION ALL的单个子查询中使用ORDER BY,除非该子查询同时搭配LIMIT。原语句中第一个子查询只有ORDER BY没有LIMIT,也没有用括号包裹,导致语法解析失败。

修正后的写法

写法一:修正原逻辑的语法问题

给第一个子查询添加括号和LIMIT 1,确保它只返回最大的唯一数字,再通过UNION ALL拼接NULL,最后整体取第一条结果:

(SELECT num
 FROM MyNumbers
 GROUP BY num
 HAVING COUNT(num) = 1
 ORDER BY num DESC
 LIMIT 1)
UNION ALL
SELECT NULL AS num
LIMIT 1

写法二:更简洁的聚合函数方案

利用聚合函数MAX的特性(当输入集合为空时返回NULL),直接嵌套子查询实现需求,逻辑更清晰且性能更优:

SELECT MAX(num) AS num
FROM (
    SELECT num
    FROM MyNumbers
    GROUP BY num
    HAVING COUNT(num) = 1
) AS unique_nums

这个方案的逻辑是:先通过子查询筛选出所有仅出现一次的数字,再在外层取这些数字的最大值;如果没有符合条件的数字,子查询返回空集,MAX函数自然返回NULL,完全匹配需求。

内容的提问来源于stack exchange,提问作者Yinan Wu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 21:37:05