union 若是不使用表的命名空间直接排序的话只需要在语句后直接加order by就可以
select name, age, day from user1
union
select name, age, day from user2
order by day
这样可以直接对两个表综合排序
但是如果使用命名空间则排序会出现错误
例如
select a.name, a.age, a.day from user1 a
union
select b.name, b.age. b.day from user2 b
order by a.day (或者是order by b.day)
这样在排序中也使用命名空间是会出错的,如果在选择时使用命名空间而排序时不使用命名空间则不会出现错误,如下所示
select a.name, a.age, a.day from user1 a
union
select b.name, b.age. b.day from user2 b
order by day
这种情况适用于不需要全部使用命名空间指定表的操作
如果排序操作也需要使用命名空间像前面所述会出错,若对联合查询的表分别使用命名空间排序的话是不符合SQL语法的,如下所示
select a.name, a.age, a.day from user1 a order by a.day
union
select b.name, b.age. b.day from user2 b order by b.day
如果想对两个联合查询的命名空间表使用排序操作的话可以使用子查询语句避开SQL的语法限制,如下所示
select aa.name, aa.age, aa.day from (select a.name,a.age,a.day from user1 a order by a.day limit 0, 100) aa
union
select bb.name, bb.age, bb.day from (select b.name,b.age,b.day from user2 b order by b.day limit 0, 100) bb
这样就可以实现命名空间下的综合排序,注意必须使用 limit,否则排序会失效