mysql的union排序失效问题

union排序问题


mysql的union排序失效问题

例子1:(排序失效)
select * from busi_dept where dept=20 order by rank desc
union
select * from busi_dept where dept=30 order by rank asc

例子2:(排序仍然失效,但是网上诸如此类的太多,显然他们并没有做过测试)
即使用子查询再次查了一遍,依然解决不了排序问题
select * from ( select * from busi_dept where dept=20 order by rank desc ) t1
union
select * from ( select * from busi_dept where dept=30 order by rank asc ) t2

例子3:(亲测成功)
在例子2的基础上加入 limit,排序成功(至于原因,尚在研究之中)
select * from ( select * from busi_dept where dept=20 order by rank desc limit 10000) t1
union
select * from ( select * from busi_dept where dept=30 order by rank asc limit 10000) t2
例子3的弊端:limit后的数字无法确定,数字过小可能不能查询到所有数据,数字过大sql效率低下。

例子4:(亲测成功)
select * from
(SELECT id,name,parent_id,0 as ord FROM base_depart WHERE parent_id = 1 UNION
SELECT id,name,parent_id,1 as ord FROM base_depart WHERE parent_id =12) t order by ord,id desc
例子4的思路:就是重新声明一个字段(ord),用数字最好,第一个查询用0,第二个查询用1,之后排序先根据ord排序(就可以使union之前的sql数据排在前面,union之后的数据排在后面),再根据你需要排序的字段排序,从而达到排序的效果。

猜你喜欢

转载自blog.csdn.net/qq_42281590/article/details/97396382