MySQl如何使用union all或任意替代方案使两个合并两个表产生结果
我有一个包含国家、地区和次区域的表格 一个国家有几个地区,一个国家有几个次区域 我必须先按国家,然后按地区,再按次区域订购 到目前为止,我可以很容易地处理这个问题,我正在编写以下查询MySQl如何使用union all或任意替代方案使两个合并两个表产生结果,mysql,sql,Mysql,Sql,我有一个包含国家、地区和次区域的表格 一个国家有几个地区,一个国家有几个次区域 我必须先按国家,然后按地区,再按次区域订购 到目前为止,我可以很容易地处理这个问题,我正在编写以下查询 SELECT * FROM NATION ORDER BY NAME ASC , REGION ASC, SUBREGION ASC 直到这里没有问题 不幸的是,我被要求将意大利列为第一位,保留了我上面提到的所有排序 结果应该如下所示: 民族区域次区域 意大利 意大利A B 意大利 意大利B A 意大利B 阿尔巴
SELECT * FROM NATION ORDER BY NAME ASC , REGION ASC, SUBREGION ASC
直到这里没有问题
不幸的是,我被要求将意大利列为第一位,保留了我上面提到的所有排序
结果应该如下所示:
民族区域次区域
意大利
意大利A B
意大利
意大利B A
意大利B
阿尔巴尼亚A
阿尔巴尼亚A B
阿尔巴尼亚
阿尔巴尼亚B A
阿尔巴尼亚B
我不可行的解决方案是有两个查询,一个是只选择意大利和所有区域和次区域,另一个是选择意大利不在的地方和所在地,并在这两个表上使用“全部联合”。
不幸的是,UNION ALL并没有保留排序
仅这两个查询就可以很好地工作,但当我使用union时,它们并没有保持我所期望的顺序:
SELECT * FROM NATION WHERE NAME = 'ITALY' ORDER BY NAME ASC , REGION ASC, SUBREGION ASC
UNION ALL
SELECT * FROM NATION WHERE NOT NAME = 'ITALY' ORDER BY NAME ASC , REGION ASC, SUBREGION ASC
我尝试了Union All,并从web上获得了几篇文章,如:
还有很多其他功能,但我已经关闭了浏览器选项卡,因此无法链接它们
我甚至试过做类似的事情
SELECT *, 1 as filter FROM NATION WHERE NAME = 'ITALY' ORDER BY NAME ASC , REGION ASC, SUBREGION ASC
UNION ALL
SELECT *, 2 as filter FROM NATION WHERE NAME != 'ITALY' ORDER BY NAME ASC , REGION ASC, SUBREGION ASC
ORDER BY RS
没用
也试过了,但没有成功
WITH cte as(
SELECT *, 1 as filter FROM NATION WHERE NAME = 'ITALY' ORDER BY NAME ASC , REGION ASC, SUBREGION ASC
UNION ALL
SELECT *, 2 as filter FROM NATION WHERE NAME != 'ITALY' ORDER BY NAME ASC , REGION ASC, SUBREGION ASC
ORDER BY RS)
select* from CTE
ORDER BY RS
您只需通过向订单添加一个条件即可:
select n.*
from nation n
where (name = 'ITALY') desc, -- put Italy first
name, region subregion