开通博客有一段时间了,第一次博文。本身是个理工科的,没啥文采,就想着把平时遇到的问题记录下来,防止自己以后忘了还要去翻找。
今天看到同事写的代码,查询两张表里的数据,结果集类型是一样的。写了两条查询,还用循环去重,结果写的有点问题,在迭代器里面做了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不去重;