> 文章列表 > tp6 union和unionAll使用

tp6 union和unionAll使用

tp6 union和unionAll使用

前置条件:每个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  查询结果如下: