mysql order by and_Mysql union 和 order by 同时使用需要注意的问题

1.直接使用会报错,

Incorrect usage of UNION and ORDER BY。

SELECT * FROM t1 WHERE 1=1 ORDER BY t1.id DESC

UNION

SELECT * FROM t1 WHERE 1=1 ORDER BY t1.id  DESC

原因是有两个order by ,可以把前一个select的order by去掉,但这样排序就是union 后的整个结果集排序。显然不符合需求

因为使用union 就是为了 先查询出第一个结果集 放前面 按某个规则排序。然后再查询出第二个结果集,整体放在第一个结果集后面 ,按某规则排序。

2.有一个坑是 给两个select语句分别加括号,虽然不报错了,但是order by 不起作用。

(SELECT * FROM t1 WHERE 1=1 ORDER BY t1.id DESC)

UNION

(SELECT * FROM t1 WHERE 1=1 ORDER BY t1.id  DESC)

在子句中加入limit 有效。

然后还一种方式是

select * from (SELECT * FROM t1 WHERE 1=1 ORDER BY t1.id DESC) t2

UNION

select * from (SELECT * FROM t1 WHERE 1=1 ORDER BY t1.id  DESC) t3        这样,注意子查询后记录要起别名 t2、t3

还有union 和union All区别。

union 会去重,即两个查询的结果集会过滤重复行。 union All不会。所以union All 比union效率高。

传送门:

说的很详细了,覆盖各种坑

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值