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

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,否则排序会失效

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值