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

如何让Union All查询结果中ID为1的记录排在第一行?

解决方案

要让ID为1的产品始终排在结果集第一行,同时其余产品按price降序排列,你需要在排序逻辑中加入优先级判断,同时注意union和union all的区别:

1. 修正Union为Union All(可选但重要)

原语句使用union会自动去重,导致ID=1的产品仅出现一次。如果需要保留两个查询的全部结果(比如让ID=1的产品同时出现在开头和原位置),请改用union all;如果只需要ID=1的产品出现一次,可以继续用union,但建议添加过滤条件避免重复。

2. 添加优先级排序字段

通过自定义排序条件,给ID=1的行赋予最高优先级,其余行按price降序排列:

通用SQL写法(适配所有数据库)

select * from products where id=1 
union all
select * from products where id != 1 -- 过滤重复,不需要可删除
order by 
    case when id=1 then 0 else 1 end asc,
    price desc;

MySQL简化写法

如果使用MySQL,可以用field()函数简化排序逻辑:

select * from products where id=1 
union all
select * from products where id != 1
order by 
    field(id, 1), -- ID=1的行优先级最高
    price desc;

逻辑说明

  • case when id=1 then 0 else 1 end asc:给ID=1的行标记为0,其余行标记为1,按升序排列后0会排在所有1的前面。
  • price desc:在优先级相同的行(非ID=1的行)中,按价格降序排列。

内容的提问来源于stack exchange,提问作者Deep Kumar Mondal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 20:45:54