開通博客有一段時間了,第一次博文。本身是個理工科的,沒啥文采,就想着把平時遇到的問題記錄下來,防止自己以后忘了還要去翻找。
今天看到同事寫的代碼,查詢兩張表里的數據,結果集類型是一樣的。寫了兩條查詢,還用循環去重,結果寫的有點問題,在迭代器里面做了remove操作,報錯了。我心想
這種需求應該聽常見的吧,肯定有好的解決方案。於是,我就去請教某度了。結果發現,sql果然是厲害的,用union 和union all 就可以解決問題了。
關於union 和 union all 的用法如下:
select * from tableA union select * from tableB union select * from tableC
注意事項:
1.被合並的結果集中每條記錄的字段數量和對應順序的數據類型要相同;
2.查詢結果的字段名以第一條select語句的查詢結果為准,后面的select語句中盡管可以取不一樣的名字,但字段名扔為第一條select語句中的名字;
3.如果select語句中含有各自的order by, limit 時需將其用()括起來,若將最后合並的結果集做處理,則可以放在所有語句的最后不用();
4. union 自帶去重的,union all 則不去重;
5.union 和 union all 也可以混用,如; select * from tableA union select * from tableB union all select * from tableC,類似於加法運算的效果,A+B=D為去重,D+C不去重;