mysql 中关于 union 查询多表排序的问题

时间:2025-03-04 10:43:10

union 若是不使用表的命名空间直接排序的话只需要在语句后直接加order by就可以

select name, age, day from user1
union
select name, age, day from user2 
order by day

这样可以直接对两个表综合排序
但是如果使用命名空间则排序会出现错误
例如

select , ,  from user1 a 
union
select , .  from user2 b
order by  (或者是order by )

这样在排序中也使用命名空间是会出错的,如果在选择时使用命名空间而排序时不使用命名空间则不会出现错误,如下所示

select , ,  from user1 a 
union
select , .  from user2 b
order by day

这种情况适用于不需要全部使用命名空间指定表的操作
如果排序操作也需要使用命名空间像前面所述会出错,若对联合查询的表分别使用命名空间排序的话是不符合SQL语法的,如下所示

select , ,  from user1 a  order by 
union
select , .  from user2 b order by 

如果想对两个联合查询的命名空间表使用排序操作的话可以使用子查询语句避开SQL的语法限制,如下所示

select , ,  from (select ,, from user1 a order by  limit 0, 100) aa
union
select , ,  from (select ,, from user2 b order by  limit 0, 100) bb

这样就可以实现命名空间下的综合排序,注意必须使用 limit,否则排序会失效