如何让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
相关产品推荐
相关产品推荐

