为啥在mysql中第一个union两个子句的order by不起作用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥在mysql中第一个union两个子句的order by不起作用相关的知识,希望对你有一定的参考价值。

参考技术A union 是去前后两个结果集的并集且取出重复项, 只需要最后order by排序结果就行了,在前面结果1的排序 UNION 结果2的排序 UNION 结果三的排序。 可以直接吧所有表结果并在一起,然后排序. 你可以试试,应该结果一样本回答被提问者和网友采纳 参考技术B 莫有为什么这是mysql语法的一部分,如果在union 中使用order by 必须同时加上limit 子句。 参考技术C 如果在union 中使用order by 必须同时加上limit 子句 参考技术D 因为顺序问题 所有没反应 你妹的吻

MYSQL union 和union all 用法 /

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。

请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。去重,操作符选取不同的值

UNION ALL 顾名思义 unionall 显示全部 UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。

-- 案卷总数
SELECT
	count( t.id ) AS tiaoshu 
FROM
	grid_case_his t 
WHERE
	t.BELONG_TOWN LIKE CONCAT_WS( '111', '', '%' ) UNION ALL-- 	立案数
SELECT
	count( l.id ) AS tiaoshu 
FROM
	grid_case_his l 
WHERE
	l.CASE_REGISTE_TIME > 0 
	AND l.BELONG_TOWN LIKE CONCAT_WS( '111', '', '%' ) UNION ALL-- 			结案数
SELECT
	count( j.id ) AS tiaoshu 
FROM
	grid_case_his j 
WHERE
	j.CASE_STATUS = 'case_status_logoff' 
	AND j.BELONG_TOWN LIKE CONCAT_WS( '111', '', '%' ) UNION ALL-- 			返工数
SELECT
	count( d.id ) AS tiaoshu 
FROM
	grid_case_his d 
WHERE
	d.CASE_STATUS = 'case_status_rebut' 
	AND d.BELONG_TOWN LIKE CONCAT_WS( '111', '', '%' ) UNION ALL-- 				在办
SELECT
	count( k.id ) AS tiaoshu 
FROM
	grid_case_his k 
WHERE
	k.`CASE_STATUS` != 'case_status_logoff' 
	AND k.BELONG_TOWN LIKE CONCAT_WS( '111', '', '%' ) UNION ALL-- 				超期案件
SELECT
	count( v.id ) AS tiaoshu 
FROM
	grid_case_his v 
WHERE
	v.`CASE_STATUS` != 'case_status_logoff' 
	AND CURDATE() > v.CASE_LIMIT_TIME 
	AND v.BELONG_TOWN LIKE CONCAT_WS( '111', '', '%' ) 
	LIMIT 1000
	

CURDATE() > v.CASE_LIMIT_TIME
CURDATE() : 当前时间
CONCAT_WS :字符串拼接 类似于 like 111% 以111开头的

可参考W3C

以上是关于为啥在mysql中第一个union两个子句的order by不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在 mysql 中使用 union 和 order by 子句

MYSQL union 和union all 用法 /

MYSQL union 和union all 用法 /

MySQL中Union子句不支持order by的解决方法

带有 union 和 in 子句的 Mysql 错误

Mysql Unknown column in where 子句 union all