前置条件:每个union方法相当于一个独立的SELECT语句。
UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
故表结构必须相同
union all是将连接的两个查询结果表连接起来;
union是将连接的两个查询结果表连接起来并做去重处理;
union和union all的区别
union要进行重复值扫描做去重处理,所以效率低。如果合并没有刻意要删除重复行,建议使用Union All
eg1: $a = Db('edu_testtable_one')->field('name') ->table('edu_testtable_one') ->union('SELECT name from edu_testtable_two') ->union('SELECT name from edu_testtable_three') ->select(); eg2: $a = Db('edu_testtable_one')->field('name') ->table('edu_testtable_one') ->union(['SELECT name from edu_testtable_two', 'SELECT name from edu_testtable_three']) ->select();
eg1等同eg2 查询结果如下:
eg3:
$a = Db('edu_testtable_one')->field('name') ->table('edu_testtable_one') ->unionAll('SELECT name from edu_testtable_two') ->unionAll('SELECT name from edu_testtable_three') ->select();
eg4:
$a = Db('edu_testtable_one')->field('name') ->table('edu_testtable_one') ->union(['SELECT name from edu_testtable_two', 'SELECT name from edu_testtable_three'], true) ->select();
eg3等同eg4 查询结果如下: