MYSQL中的UNION
UNION在進行表鏈接后會篩選掉重復的記錄,所以在表鏈接后會對所產生的結果集進行排序運算,刪除重復的記錄再返回結果。
舉例說明:
select * from table1 union select * from table2
這個SQL在運行時先取出兩個表的結果,再用排序空間進行排序刪除重復的記錄,最后返回結果集,如果表數據量大的話可能會導致用磁盤進行排序。?
MySQL中的UNION ALL UNION ALL只是簡單的將兩個結果合并后就返回。這樣,如果返回的兩個結果集中有重復的數據,那么返回的結果集就會包含重復的數據了。
舉例說明:
select * from table1 union all select * from table2
注: 使用 UNION 時 前一個 select column的個數要等于后一個select column的個數 如: table1: (id,createDate,lastUpdateDate,desc,num,hashCode), ???? table2: (id,createDate,lastUpdateDate,desc)
如果現在使用: select * from table1 UNION ALL select * from table2 則是不會成功的, 數據庫為報: Error The used SELECT statements have a different number of columns
這是提示查詢的兩張表的字段不統一,如果table1比table2的字段內容多,可以使用空字符串來代替
select id,createDate,lastUpdateDate,desc,num,hashCode from table1 UNION ALL select id,createDate,lastUpdateDate,desc,'','' from table2?
如果里面有不想要的,千萬要記住前面查詢內容要和后面查詢內容的字段個數要一樣,前面你查詢4個,后面也要相應的放4個,這樣就不會提示參數數量不同的錯誤了。
?
其實稍稍修改一下就可以了 對于 'select id,createDate,desc,hasCode from table1' 可以任意選擇4個field
?
從效率上說,UNION ALL 要比UNION快很多,所以,如果可以確認合并的兩個結果集中不包含重復的數據的話,那么就使用UNION ALL。
?
如果遇到兩張表數據不同來集合查詢,可以使用union all這個函數進行操作
SELECT COUNT(c.a) ? FROM ( (SELECT UID a,ID,SERIAL,ParkName,CardNO,ScoreRealPay,PayFlag,PayType,Createtime FROM cp_consumption_record WHERE UID=761 AND PayFlag=1? ORDER BY Createtime DESC) UNION ALL (SELECT UID a,CpResID,CpParkID,ParkSERIAL,CarCode,Price,BusinessType,CardNO,CreateDate FROM cp_reservation WHERE UID=761 AND BusinessType IN(1,2,3) ORDER BY CreateDate DESC) ) c
這是查詢結果集共有多少條數據,
如果還有查詢條件,直接在c后面添加就可以,比如按照時間進行查詢
SELECT c.UID,c.ScoreRealPay,c.PayFlag,c.PayType? FROM ( (SELECT UID AS UID,ID AS ID,SERIAL AS SERIAL ,ParkName AS ParkName,CardNO CardNO,ScoreRealPay ScoreRealPay,PayFlag PayFlag,PayType PayType,Createtime Createtime FROM cp_consumption_record WHERE UID=761 AND PayFlag=1? ORDER BY Createtime DESC) UNION ALL (SELECT UID a,CpResID,CpParkID,ParkSERIAL,CarCode,Price,BusinessType,CardNO,CreateDate FROM cp_reservation WHERE UID=761 AND BusinessType IN(1,2,3) ORDER BY CreateDate DESC) ) c ORDER BY Createtime DESC/ASC
這里強調一下,你要按照什么樣的條件進行查詢時,要分別在select子查詢中添加上條件,最后在按照統一的時間倒序或者正序
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
