mysql 中關於 union 查詢多表排序的問題

2021-09-13 13:23:55 字數 1223 閱讀 8548

union 若是不使用表的命名空間直接排序的話只需要在語句後直接加order by就可以

select name, age, day from user1

union

select name, age, day from user2

order by day

這樣可以直接對兩個表綜合排序

但是如果使用命名空間則排序會出現錯誤

例如

select a.name, a.age, a.day from user1 a 

union

select b.name, b.age. b.day from user2 b

order by a.day (或者是order by b.day)

這樣在排序中也使用命名空間是會出錯的,如果在選擇時使用命名空間而排序時不使用命名空間則不會出現錯誤,如下所示

select a.name, a.age, a.day from user1 a 

union

select b.name, b.age. b.day from user2 b

order by day

這種情況適用於不需要全部使用命名空間指定表的操作

如果排序操作也需要使用命名空間像前面所述會出錯,若對聯合查詢的表分別使用命名空間排序的話是不符合sql語法的,如下所示

select a.name, a.age, a.day from user1 a  order by a.day

union

select b.name, b.age. b.day from user2 b order by b.day

如果想對兩個聯合查詢的命名空間表使用排序操作的話可以使用子查詢語句避開sql的語法限制,如下所示

select aa.name, aa.age, aa.day from (select a.name,a.age,a.day from user1 a order by a.day limit 0, 100) aa

union

select bb.name, bb.age, bb.day from (select b.name,b.age,b.day from user2 b order by b.day limit 0, 100) bb

這樣就可以實現命名空間下的綜合排序,注意必須使用 limit,否則排序會失效

MySQL組合查詢UNION

組合查詢 union,放在兩個select語句之間,如果有n個select語句,則用n 1個union.重複行也出現 union all 排序 order by 寫在所有select語句最後,只用一次。union可簡化where語句 union適合用於查詢多個表的情況下。多個查詢 多條select語...

mysql聯合查詢union

將多條查詢結果合併成乙個結果 查詢語句1 union all 查詢語句2 查詢部門編號 90或郵箱包含a的員工資訊 select from employees where email like a or department id 90 或者 select from employees where ...

MySql 高階查詢 union 聯合查詢

1.union 聯合查詢 將多個查詢結果集合到一起 2.語法 select 查詢語句 union select 查詢語句 union select 查詢語句 union select 查詢語句 3.例子 查詢學生資訊和班級資訊,集合到一起 select class id,class name,cla...