在 sql 联合中排序

Sorting in sql union

假设我在同一列中有 table 1 和 table 2。我想将它们组合起来并按 column3 和 column4 排序,并保留 table 列顺序。怎么做到的?

我收到以下错误:

ORDER BY items must appear in the select list if the statement contains a UNION, INTERSECT or EXCEPT operator.

查询

SELECT COLUMN1, COLUMN2, COLUMN3, COLUMN4 FROM TABLE 1
UNION COLUMN1, COLUMN2, COLUMN3, COLUMN4 FROM TABLE 2
ORDER BY COLUMN2, COLUMN3

unionunion all 运算符处理完整的查询。 union:

后缺少 select 关键字
SELECT COLUMN1, COLUMN2, COLUMN3, COLUMN4 FROM TABLE1
UNION 
SELECT COLUMN1, COLUMN2, COLUMN3, COLUMN4 FROM TABLE2
ORDER BY COLUMN2, COLUMN3

使用子查询
示例:

SELECT * FROM 
(
SELECT COLUMN1, COLUMN2, COLUMN3, COLUMN4 FROM TABLE1
UNION 
SELECT COLUMN1, COLUMN2, COLUMN3, COLUMN4 FROM TABLE2
) ResultTABLE

ORDER BY ResultTABLE.COLUMN2, ResultTABLE.COLUMN3

此方法可以帮助您避免模糊的列并对整个结果进行排序。

当您使用 UNION 或 UNION ALL 结果集时,默认情况下从第一个查询中获取列名。因此,当您编写 ORDER BY 时,请确保在查询结束时给出第一个查询中的名称(在您的情况下为 table1)。我想在你的情况下 table1 和 table2 没有相同的列。所以需要在ORDER BY中写query1(table1)列名。

SELECT COLUMN1, COLUMN2, COLUMN3, COLUMN4 FROM TABLE 1
UNION 
select COLUMN1, COLUMN2, COLUMN3, COLUMN4 FROM TABLE 2
ORDER BY COLUMN2, COLUMN3 -- here column names should be from the table1