合并多个结果集

union, union all 可以将多个查询产生的结果合并为一个集合。

区别:前者合并后会去年重复的记录,并且对结果集进行排序;后者不会去年重复记录,如果需要排序,则要在最后一个有union的子句中使用order by以指定排序方式。

要求:每个结果集必须有类似的数据相似的字段数目,且在选择列表中字段顺序相同的情况下才能使用。

eg: select * from tableaa union [all] select * from tablebb; (tableaa and tablebb with same data stucture).

如果您想使用ORDER BY或LIMIT子句来对全部UNION结果进行分类或限制,则应对单个地SELECT语句加圆括号,并把ORDER
BY或LIMIT放到最后一个的后面:
(SELECT a FROM tbl_name WHERE a=10 AND B=1) UNION
(SELECT a FROM tbl_name WHERE a=11 AND B=2) ORDER BY a LIMIT 10;
麻烦一点也可以这么干:
select userid from (select userid from testa union all select userid from testb) t order by userid limit 0,10;

如果你还想group by,而且还有条件,那么:
select userid from (select userid from testa union all select userid from testb) t group by userid having count(userid)=2;

注意:在union的括号后面必须有个别名,否则会报错

当然了,如果当union的几个表的数据量很大时,建议还是采用先导出文本,然后用脚本来执行
因为纯粹用sql,效率会比较低,而且它会写临时文件,如果你的磁盘空间不够大,就有可能会出错
Error writing file '/tmp/MYLsivgK' (Errcode: 28)

原文地址:https://www.cnblogs.com/gogojiayou/p/3274879.html