union组合结果集时的order问题

如题所述

在处理项目中遇到的SQL问题时,我利用了union来组合两个select结果集,但在调试时却遇到了错误提示,指出问题出现在union附近。起初,我猜测这可能是由于使用了group by导致的,因为union似乎不支持group by操作。为确保项目进度,我暂时在代码中做了合并处理。然而,作为对代码质量的追求,我始终对这个问题感到不满足,直到查阅MS在线帮助文档,找到了关于union的说明:各select语句不能包含自己的order by或compute子句,而只能在最后一个select语句后使用。group by和having子句则可以在各个select语句中指定。这一发现表明,我的猜测有误。验证后,去掉order by子句确实解决了问题,揭示了union在处理group by时的正确用法:只能在最终结果集上使用order by,而不能在各查询中使用。这与某些情况下希望在每个查询后先进行排序,然后再进行union操作的非正常用法形成对比。此外,union后面可以添加all关键字,该选项在默认情况下会移除重复项,但在使用all时,将组合所有结果,不进行筛选。对于确认各查询结果无重复情况,建议使用all,以提高效率。在SQL查询结果合并时,了解union all的用法显得尤为重要。有关union all的用法、SQLSERVER中union、cube、rollup、cumpute运算符的说明、mySQL UNION运算符的默认规则研究、SQL Union和Union All的使用方法、union与union all的区别等资料,对于深入理解SQL查询合并和优化提供了宝贵的资源。
温馨提示:内容为网友见解,仅供参考
无其他回答

union组合结果集时的order问题
在处理SQL查询时,使用UNION来组合结果集时,常见一个问题涉及到ORDER BY子句的使用。通常,UNION不支持在各个SELECT语句中使用ORDER BY,但允许在最后一个SELECT语句之后使用。这意味着,仅能对最终的组合结果集进行排序。然而,有时候确实需要在每个查询中先进行排序再进行组合,这并不符合标准用法。要解决...

union组合结果集时的order问题
在处理项目中遇到的SQL问题时,我利用了union来组合两个select结果集,但在调试时却遇到了错误提示,指出问题出现在union附近。起初,我猜测这可能是由于使用了group by导致的,因为union似乎不支持group by操作。为确保项目进度,我暂时在代码中做了合并处理。然而,作为对代码质量的追求,我始终对这个问题...

union与orderby合并使用_MySQL
在SQL查询中,UNION关键字被用于合并多个查询结果集,形成单一的结果集。但当需要在合并结果的同时对数据进行排序时,直接使用UNION可能会遇到问题。例如,编写如下代码尝试根据不同类型分别随机筛选指定数量的记录,并将结果合并:SELECT TOP N [Id],[Name],[Comment] FROM [Product] WHERE [Type]='TYP...

UNION ALL、UNION与ORDER BY
一直以为UNION和UNION ALL就是把每个子查询的结果集合并起来,只是UNION要去掉重复项。直到今天发现了一个问题,UNION的子句中不能出现ORDER BY。解决方法是,要把有ORDER BY的子句作为子查询的子句。不过呢,就算解决这个问题,子查询的排序和UNION后的结果集排序也没有联系。因为UNION会对两个结果集进行...

在由union运算符组合起来的select语句中,不能有order by语句,但是,可以...
在由UNION运算符组合起来的SELECT语句中,不能有ORDER BY子句。但是,可以把ORDER BY子句放在最后的SELECT语句后面,以便对最后(集合并操作)的结果表排序。 ORDER BY子句可以对任何列名排序。在SQL Server中,由于结果表把第一条SELECT语句中的列名作为结果表中的列名,因此,在上节最后的实例中,ORDER ...

MySQL中Union子句不支持order by的解决方法
本文实例讲述了MySQL中Union子句不支持order by的解决方法。分享给大家供大家参考,具体如下:我对DB知之甚少,这问题只在MySQL遇到,不知道别的DBMS是不是也如此。问题是这样的,我打算在一个表里获得与某一行记录相邻的两行,并且想通过union一起取出来,所以这么写:select id,title from subjects wh...

请教: SQL中的union结果优先排序问题
加入 NEWS 表里有 名字,年龄,生日 那么:select * from (select 1 as 顺序 ,名字,年龄,生日 from news where title like '%亲人%'union all select 2 as 顺序,名字,年龄,生日 from news where title like '%朋友%') a order by 顺序 -- 想家其他字段 就 再加上 ...

union后 order by case
order by只能用于外部查询中,不能应用于子查询中。上面的sql,union all合并了2个sql查询结果集,order by当成union all合并结果集的排序,但是结果集中无表a和字段bqdm。select * from (select a.bqdm,sum(a.zyrs) 今日在院人数 from YZCX_YZRB_ZY0 a ,ZY_BQDMK b where a.bqdm=b.id g...

sqlserver2005 查询有union all组成的表为什么union中的排序不起...
只是对结果集的一部分进行排序,不能达到对整个结果集进行排序的效果,所以是没有意义的 如果你想实现对整个结果集进行排序的话,可以在外面order by :select 你想要的字段 from (查询1 union all 查询2)order by 排序字段 看了你的问题补充:将order by [time] desc 放在ff后边就行啦 ...

SQL中union 和order by的问题。。。
select c.* from (select price,kg from a union select price,kg from b) c order by c.price desc

相似回答
大家正在搜