表合併(union)與排序(order by)不能共存的問題

在MySQL中,想要對錶的多次查詢結果分別排序合併是不可行的
如:

SELECT name FROM student
ORDER BY age
UNION
SELECT grade FROM student
ORDER BY age;

爲了避開語法的問題,有了下面的解決辦法,使用子查詢

SELECT * from
(SELECT name FROM student
ORDER BY age) t1
UNION (all)
SELECT * from
(SELECT grade FROM student
ORDER BY age);

順利通過,可是查看結果會發現,排序失效了。因爲子查詢規則是沒有top語句(mysql中用limit代替),
排序不生效,再次修改:

SELECT * from
(SELECT name FROM student
ORDER BY age limit 0, 1000) t1
UNION (all)
SELECT * from
(SELECT grade FROM student
ORDER BY age limit 0, 1000);

成功!!!

最後,union和union all的差別是前者會忽略重複數據,後者不會。

 

轉載!https://www.jianshu.com/p/2a53c2fdb042

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章