在使用 SQL 查询通过 UNION 运算符组合多个表中的数据时,通常需要对结果进行排序。但是,简单地在查询末尾添加 ORDER BY 子句可能会导致错误。
考虑以下示例:
<code class="language-sql">SELECT table1.field1 FROM table1 ORDER BY table1.field1 UNION SELECT table2.field1 FROM table2 ORDER BY table2.field1</code>
此查询尝试对 UNION 操作的结果进行排序,但它会引发异常,因为 ORDER BY 子句不允许位于包含各个 SELECT 语句的括号之外。
要正确排序 UNION 查询,需要在每个 SELECT 语句中包含 ORDER BY 子句。这确保了在组合各个数据集之前对它们进行排序。以下是重写上述查询以正确排序结果的方法:
<code class="language-sql">SELECT * FROM ( SELECT table1.field1 FROM table1 ORDER BY table1.field1 ) DUMMY_ALIAS1 UNION ALL SELECT * FROM ( SELECT table2.field1 FROM table2 ORDER BY table2.field1 ) DUMMY_ALIAS2</code>
通过这种方法,各个数据集在使用 UNION ALL 组合之前会在括号内进行排序。然后,根据最外层 SELECT 语句中 ORDER BY 子句的要求对组合结果进行排序。
以上是如何正确排序 SQL UNION 查询的结果?的详细内容。更多信息请关注PHP中文网其他相关文章!