本文共 1047 字,大约阅读时间需要 3 分钟。
MySQL中的UNION和ORDER BY命令有一些使用上的限制,特别是在使用UNION时,不能直接在每个SELECT子句中使用ORDER BY。如果需要对多个结果集进行排序,必须将每个子句分别用括号括起来,并在UNION后的结果集中使用ORDER BY。但需要注意的是,直接在子句中使用ORDER BY会导致语法错误。
SELECT * FROM `table_201604` ORDER BY `REPORT_TIME` DESCUNION ALLSELECT * FROM `table_201605` ORDER BY `REPORT_TIME` DESC
这个SQL语句会报错“Incorrect usage of UNION and ORDER BY”,因为没有将每个子句用括号包裹。
为了解决这个问题,可以将每个子句用括号包裹,然后在UNION后的结果集中使用ORDER BY:
(SELECT * FROM `table_201604` ORDER BY `REPORT_TIME` DESC)UNION ALL(SELECT * FROM `table_201605` ORDER BY `REPORT_TIME` DESC)
然而,这种方法仍然有问题,因为ORDER BY只能应用在UNION后的整个结果集中,而不能在每个子句中单独应用。
为了对每个子句分别进行排序,可以使用LIMIT来限制每个子句的结果集数量,然后在UNION之后对整个结果集进行排序:
(SELECT * FROM `table_201604` ORDER BY `REPORT_TIME` DESC LIMIT 5)UNION ALL(SELECT * FROM `table_201605` ORDER BY `REPORT_TIME` DESC LIMIT 5)
这样,每个子句都会按REPORT_TIME
字段降序排列,并且最终结果集会合并并按REPORT_TIME
字段排序。
通过以上方法,可以正确使用UNION和ORDER BY命令来对多个结果集进行排序和合并。
转载地址:http://wgffk.baihongyu.com/