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