各位大神,怎么在sql语句union中使用order by?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了各位大神,怎么在sql语句union中使用order by?相关的知识,希望对你有一定的参考价值。

select u.*, r.statusname, p.*, c.*
from UserLogin U, RepairStatus R, Product P, Customer C
where U.status = R.statusid
and U.ProductName = P.ProductName
and U.BoatName = C.BoatName
and U.RepairDate <= '2011-05-25'
and R.statusname = '待维修'
order by U.RepairDate desc
union

select u.*, r.statusname, p.*, c.*
from UserLogin U, RepairStatus R, Product P, Customer C
where U.status = R.statusid
and U.ProductName = P.ProductName
and U.BoatName = C.BoatName
and U.RepairDate <= '2011-05-25'
and R.statusname = '待检测'
order by u.RepairDate desc
使这个语句执行通就行

试试把order by 提出来。
(select u.*, r.statusname, p.*, c.*
from UserLogin U, RepairStatus R, Product P, Customer C
where U.status = R.statusid
and U.ProductName = P.ProductName
and U.BoatName = C.BoatName
and U.RepairDate <= '2011-05-25'
and R.statusname = '待维修'
union

select u.*, r.statusname, p.*, c.*
from UserLogin U, RepairStatus R, Product P, Customer C
where U.status = R.statusid
and U.ProductName = P.ProductName
and U.BoatName = C.BoatName
and U.RepairDate <= '2011-05-25'
and R.statusname = '待检测')
order by u.RepairDate desc
参考技术A select * from (
select u.*, r.statusname, p.*, c.*
from UserLogin U, RepairStatus R, Product P, Customer C
where U.status = R.statusid
and U.ProductName = P.ProductName
and U.BoatName = C.BoatName
and U.RepairDate <= '2011-05-25'
and R.statusname = '待维修'
union
select u.*, r.statusname, p.*, c.*
from UserLogin U, RepairStatus R, Product P, Customer C
where U.status = R.statusid
and U.ProductName = P.ProductName
and U.BoatName = C.BoatName
and U.RepairDate <= '2011-05-25'
and R.statusname = '待检测'
) a
order by RepairDate desc追问

最外面的select * ,提示为明确定义的列

数据库是oralce
我想这个应该不是问题,
sql语句该是一样的

追答

可能是你的几个表,列名有重复导致的,
比如UserLogin 表有RepairDate 字段,Product 表也有RepairDate 字段造成的
在内层的select不要用*,改用具体的列名

参考技术B
--我举个例子你就懂了
CREATE TABLE ts
(
id INT,
VALUE INT
)
GO
INSERT ts
SELECT 1,2 UNION ALL
SELECT 1,3 UNION ALL
SELECT 1,2 UNION ALL
SELECT 2,4 UNION ALL
SELECT 2,21 UNION ALL
SELECT 3,2 UNION ALL
SELECT 3,2
GO
SELECT id ,sum(value) AS s_v
FROM ts
GROUP BY id
ORDER BY sum(VALUE)
/*
id s_v
---- ----
3 4
1 7
2 25*/

就是通过分组聚合后 对分组元素进行排序
本例中就是对ID分组 然后按照id对应的value总和进行排序

SQL语句中:UNION与UNION ALL的区别

UNION用的比较多union all是直接连接,取到得是所有值,记录可能有重复   union 是取唯一值,记录没有重复   
1、UNION 的语法如下:
[SQL 语句 1]
UNION
[SQL 语句 2]

2、UNION ALL 的语法如下:
[SQL 语句 1]
UNION ALL
[SQL 语句 2]

效率:
UNION和UNION ALL关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同。

1、对重复结果的处理:UNION在进行表链接后会筛选掉重复的记录,Union All不会去除重复记录。

2、对排序的处理:Union将会按照字段的顺序进行排序;UNION ALL只是简单的将两个结果合并后就返回。

从效率上说,UNION ALL 要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复数据且不需要排序时的话,那么就使用UNION ALL。


















以上是关于各位大神,怎么在sql语句union中使用order by?的主要内容,如果未能解决你的问题,请参考以下文章

SQL语句:使用了union all后怎么分组排序

oracle 里SQL语句UNION怎么用

sql语句里面的union是啥意思

求助各位大神,小弟初学IBM DB2,求助关于数据库创建问题,多谢!!

sql中的高手中的高手来看看这个SQL查询语句中的union错在哪儿了?

如何让多个不同的SQL语句一起执行?