mysql - 使用 SQL UNION 查询排序

标签 mysql sql union

我有两个查询想附加到 MySQL 中。我发现 UNION 可以帮助我做到这一点,但它并不完美,因为它不保留每个附加查询的顺序。明确地说,我想这样做:

(SELECT name,city FROM people WHERE xxx ORDER BY yyy) 
UNION 
(SELECT name,city FROM people WHERE zzz ORDER BY www)

但是当存在 UNION 时,SQL 不会在 ORDER 语句上执行

一种解决方案是向每个子查询添加一个虚假字段,并首先按该字段排序:

(SELECT name,city,'0' as bogus FROM people WHERE xxx) 
UNION 
(SELECT name,city,'1' as bogus FROM people WHERE zzz) 
ORDER by bogus ASC, wwwzzz

但这非常低效,因为查询必须遍历所有字段才能对虚假字段进行排序。 您知道有什么解决方法吗?

谢谢

最佳答案

您是否尝试过使用 UNION ALL 而不是 UNION

参见:http://dev.mysql.com/doc/refman/5.0/en/union.html

例如:

(SELECT name,city,'0' as bogus FROM people WHERE xxx) 
UNION ALL
(SELECT name,city,'1' as bogus FROM people WHERE zzz) 
ORDER by bogus ASC, wwwzzz

关于mysql - 使用 SQL UNION 查询排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8063051/

相关文章:

mysql行顺序重新计算

mysql - 结合使用 mongoDb 和 MySQL

c# - 将 MySql 与 EntityFramework 5.0、SimpleMembership 一起使用,多个错误

mysql - SQL 中有两个不同的顺序和限制语句

php - 如果没有唯一列不存在,MySQL插入多条记录

MySql 搜索两列同一个表按第一列排序

sql - 为什么不能在 DELETE 语句中使用别名?

mysql - 无法创建包含联合的 View

dataframe - Julia DataFrame 行数据类型已更改?

mySQL:多个表上的多列连接第二部分