sql UNION 和order by同时使用

本文探讨了如何在SQL中使用UNION连接查询并进行排序,介绍了使用场景、注意事项,以及遇到的错误和解决方案。重点讲解了UNION与UNION ALL的区别,以及在处理重复和排序时的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

union就是将两个sql查询接口拼接起来

1.使用场景:当查询相同的内容但是一个sql无法同时满足条件的情况下可以用union来连接两个sql

然后对连接好的查询整体进行order by

注意:两个sql 查询出的字段必须完全一致

sql1 union sql2 order by [查询结果的公共字段]

union前后的每一个sql可以分别加where查询条件互不影响且起作用

2.使用过程中遇到的坑

(1)报错:Incorrect usage of UNION and ORDER BY。

SELECT * FROM a  ORDER BY a.id 
UNION
SELECT * FROM a  ORDER BY a.id  

原因是有两个order by ,可以把前一个select的order by去掉,但这样排序就是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)

还有一种方式是

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

我在验证过程中发现order by依然不起作用

UNION 和UNION ALL的区别是:

UNION会将两个sql的查询结果去重,UNION ALL不会去重

所以不考虑重复的条件下union all的效率要更高一些

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值