我有两个查询想附加到 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/